Dynamic Language Runtime

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Dynamic Language Runtime (DLR)
Тип System platform
Автор Microsoft Dynamic Language Runtime Team
Разработчик .NET Foundation[en]
Написана на C#
Операционная система Windows, macOS, Linux (Debian, Ubuntu)
Первый выпуск 16 апреля 2010; 11 лет назад (2010-04-16)
Аппаратная платформа Common Language Infrastructure
Последняя версия 1.3.0 (16 ноября 2020; 11 месяцев назад (2020-11-16)[1])
Лицензия Apache License 2.0
Сайт docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/dynamic-language-runtime-overview

Dynamic Language Runtime (DLR; с англ. — «Среда выполнения динамического языка») от Microsoft работает поверх исполняющей среды Common Language Runtime (CLR; с англ. — «Общеязыковая среда выполнения») и предоставляет службы компьютерного языка для динамического языка. Эти услуги включают:

DLR используется для реализации динамических языков в .NET Framework, включая проекты IronPython и IronRuby.

Поскольку реализации динамического языка используют общую базовую систему, им должно быть проще взаимодействовать друг с другом. Например, должна быть возможность использовать библиотеки любого динамического языка на любом другом динамическом языке. Кроме того, хостинг API позволяет взаимодействовать со статически типизированными языками интерфейса командной строки, такими как C# и Visual Basic .NET.

История[править | править код]

Проект Microsoft Dynamic Language Runtime был анонсирован Microsoft на MIX[en] в 2007 году[2][3].

Microsoft выпустила бета-версию .NET DLR 0.9 в ноябре 2008 года[4] и последнюю версию 0.9 в декабре 2008 года. Версия 1.0 выпущена в апреле 2010 года. В июле 2010 года фирма Microsoft изменила лицензию DLR с Microsoft Public License на Apache License 2.0[5]. С выпуском .NET 4, также в апреле 2010 года, DLR была включена в саму .NET Framework[6].

Проект DLR с открытым исходным кодом, размещённый на GitHub, имеет несколько дополнительных функций для разработчиков языка. После выпуска в июле 2010 года в течение нескольких лет деятельность по проекту велась незначительно. Это было интерпретировано разработчиком Microsoft, работавшим над IronRuby, как недостаток приверженности Microsoft к динамическим языкам в платформе .NET Framework[7][8]. Тем не менее, с 2016-2017 годов ведётся регулярная деятельность, которая привела к ряду улучшений и обновлений.

Поддерживаемые языки[править | править код]

В настоящее время службы DLR используются в разрабатываемой версии IronRuby, .NET-реализации языка Ruby, а также для IronPython[2].

В 2007 году Microsoft планировала использовать DLR для следующих Visual Basic 2010 (VB 10.0) и Managed JScript (ECMAScript 3.0)[9][10][11][12]. Однако по состоянию на август 2009 года Microsoft больше не планирует внедрять управляемый JScript в DLR[13]. Подобно C#, Visual Basic может получать доступ к объектам из динамических языков, построенных на DLR, таких как IronPython и IronRuby[14][15].

PowerShell 3.0, выпущенный в Windows 8, был обновлён для использования DLR[16].

IronScheme, реализация Scheme[17], планировали построить на основе DLR. От этой идеи отказались, потому что ветвь DLR, используемая проектом, рассинхронизировалась с магистралью, а также потому, что (по словам координатора проекта) текущая версия DLR в то время не могла поддерживать большинство требований Scheme[18].

Архитектура[править | править код]

Среда выполнения динамического языка (DLR) построена на идее, что можно реализовать особенности языка поверх общей языковой независимости абстрактного синтаксического дерева, узлы которого соответствуют определённой функциональности, которая является общим для многих динамических языков[19]. В основе этой архитектуры лежит идея о том, что количество элементарных языковых конструкций, которые должны быть реализованы в универсальном стеке, должно быть по своей сути ограничено[20]. DLR динамически генерирует код, соответствующий функциональным возможностям, выраженным этими узлами. Компилятор любого динамического языка, реализованного поверх DLR, должен генерировать абстрактные деревья DLR и передавать их библиотекам DLR.

DLR предоставляет динамически обновляемые объекты DynamicSite, которые кэшируют задачу привязки методов к объектам. Поскольку тип объекта, а также содержащиеся в нем члены в динамических языках могут изменяться в течение жизненного цикла программы, вызов метода должен проверять список методов, чтобы увидеть, является ли вызов допустимым. Объекты DynamicSite представляют и кэшируют состояние объекта и его методов; любое обновление объекта также отражается в объектах DynamicSite. DLR направляет все вызовы методов через объекты DynamicSite, которые затем выполняют быстрый поиск и привязку[en] метода с фактической реализацией[21].

В отличие от других проектов, таких как виртуальная машина Parrot (без зависимостей) или Da Vinci Machine[en] (построенная на JVM Java путём добавления новых байт-кодов в набор инструкций JVM) DLR создаётся на основе существующей виртуальной машины .NET Framework от Common Language Runtime[22].

См. также[править | править код]

Ссылки[править | править код]

  1. Релизы. GitHub. Дата обращения: 30 ноября 2020.
  2. 1 2 Hugunin, Jim Среда выполнения динамического языка (англ.A Dynamic Language Runtime (DLR)). — «В краткосрочной перспективе мы сосредоточимся на использовании небольшого количества языков для запуска первой волны разработки DLR, где мы можем работать в тесном контакте с разработчиками, чтобы сгладить худшие изломы в дизайне DLR. После этого начального этапа мы хотим обратиться к более широкому языковому сообществу.». Дата обращения: 21 июня 2007.
  3. Viehland, Dino Дорожная карта для IronPython 2.0 (15 января 2008). — «У нас действительно нет такого документа, но общая цель — выпустить IronPython 2.0 к концу года. Что касается самого DLR, то планируется выпустить версию 1.0 примерно в то же время, что и IronPython 2.0.». Дата обращения: 9 февраля 2008. Архивировано 6 сентября 2008 года.
  4. CodePlex Archive
  5. CodePlex Archive
  6. Dynamic Language Runtime Overview | Microsoft Docs
  7. Шины IronRuby от Microsoft; Джимми Скементи прыгает с корабля. rubyinside.com (7 августа 2010). — «Год назад команда сократилась вдвое, и наша маневренность была сильно ограничена. [..] В целом, я вижу серьёзное отсутствие приверженности к IronRuby и динамическому/-им языку/-ам для .NET в целом.». Дата обращения: 26 февраля 2012.
  8. Динамические языки Microsoft умирают. i-programmer.info (10 августа 2010). — «Без последнего толчка, чтобы языки работали в Visual Studio и интегрировались с дизайнером, оба языка Iron, вероятно, мертвы - и Microsoft, похоже, потеряла желание сделать их успешными.». Дата обращения: 26 февраля 2012.
  9. Объявлен управляемый JScript. Дата обращения: 4 мая 2007.
  10. Что, чёрт возьми, такое "VBx"? (1 мая 2007). — «В новом DLR у нас есть поддержка IronPython, IronRuby, JavaScript и новой динамической компиляции VBx[en].». Дата обращения: 12 августа 2009.
  11. Включение Mix, Silverlight, CoreCLR и DLR в контекст (1 мая 2007). Дата обращения: 12 августа 2008.
  12. Введение в Visual Basic 10. infoq.com (4 мая 2007). — «VB 10 использует функцию Silverlight, которая называется динамической языковой средой или DLR.». Дата обращения: 12 августа 2009.
  13. Chiles, Bill Будущее управляемого JScript (IronJScript)? (1 июня 2009). — «DLR JScript был экспериментальным для информирования проектирования DLR (деревья выражений, взаимодействие, сайты вызовов, хостинг и т. д.). JS, который мы выпустили с ASP Futures и Silverlight Dynamic SDK, стал очень старым и непригодным для использования, поскольку DLR продолжал развиваться для выпуска в CLR 4.0. К сожалению, в настоящее время нет планов по разработке и выпуску JScript, поддерживающего DLR.». Дата обращения: 12 августа 2009.
  14. Что нового в Visual Basic 2010?. Microsoft. — «Visual Basic привязывается к объектам из динамических языков, таких как IronPython и IronRuby.». Дата обращения: 12 августа 2009.
  15. Walkthrough: Creating and Using Dynamic Objects (C# and Visual Basic) | Microsoft Docs
  16. Архивная копия. Дата обращения: 30 марта 2012. Архивировано 28 апреля 2012 года.
  17. CodePlex Archive
  18. Есть ли какой-либо образец Silverlight? (11 мая 2009). — «К сожалению, моя ветка DLR плохо синхронизирована с веткой Silverlight. Я просто подумал, возможно мне DLR не нужен, разберусь. Проблема в том, что DLR как есть, недостаточно хорош для поддержки большинства требований языка Scheme.». Дата обращения: 26 июля 2009.
  19. Hugunin, Jim Деревья DLR (Часть 1) (15 мая 2007). — «Ключевой трюк реализации в DLR заключается в использовании этих видов деревьев для передачи кода в виде данных и сохранения кода в легко анализируемой и изменяемой форме как можно дольше.». Дата обращения: 23 февраля 2008.
  20. Nutter, Charles Lang.NET 2008: мысли первого дня (28 января 2008). — «Идея состоит в том, что существует быстро сглаживающаяся асимптотическая кривая количества узлов дерева выражений, необходимых для реализации каждого нового языка. Так ли это, ещё предстоит увидеть.». Дата обращения: 23 февраля 2008.
  21. Bill Chiles. CLR наизнанку: IronPython и среда выполнения динамического языка. MSDN Magazine (October 2007). Дата обращения: 10 августа 2007.
  22. Rose, John Браво за динамичную работу! (2 февраля 2008). — «Интересно отметить различия между расширениями CLR и JVM. Они работают полностью выше уровня CLR без значительного улучшения, в то время как мы разрабатываем JVM и библиотеки одновременно.». Дата обращения: 23 февраля 2008. Архивировано 6 февраля 2008 года.

Внешние ссылки[править | править код]