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

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