Dynamic Language Runtime
Dynamic Language Runtime (DLR; с англ. — «Среда выполнения динамического языка») от Microsoft работает поверх исполняющей среды Common Language Runtime (CLR; с англ. — «Общеязыковая среда выполнения») и предоставляет службы компьютерного языка для динамического языка. Эти услуги включают:
- Динамическая система типов, которая будет разделяться между всеми языками, использующими службы DLR.
- Метод динамического связывания
- Генерация динамического кода
- Хостинг API
DLR используется для реализации динамических языков в .NET Framework, включая проекты IronPython и IronRuby.
Поскольку реализации динамического языка используют общую базовую систему, им должно быть проще взаимодействовать друг с другом. Например, должна быть возможность использовать библиотеки любого динамического языка на любом другом динамическом языке. Кроме того, хостинг API позволяет взаимодействовать со статически типизированными языками интерфейса командной строки, такими как C# и Visual Basic .NET.
Что важно знать
| Dynamic Language Runtime (DLR) | |
|---|---|
| Тип | System platform |
| Авторы | Microsoft Dynamic Language Runtime Team |
| Разработчик | .NET Foundation |
| Написана на | C# |
| Операционные системы | Windows, macOS, Linux (Debian, Ubuntu) |
| Первый выпуск | 16 апреля 2010 |
| Аппаратная платформа | Common Language Infrastructure |
| Последняя версия | 1.3.0 (16 ноября 2020[1]) |
| Репозиторий | github.com/IronLanguages/dlr |
| Лицензия | Apache License 2.0 |
| Сайт | docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/dynamic-language-runtime-overview |
История
Проект Microsoft Dynamic Language Runtime был анонсирован Microsoft на MIX (Microsoft) в 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, которые затем выполняют быстрый поиск и привязку метода с фактической реализацией[21].
В отличие от других проектов, таких как виртуальная машина Parrot (без зависимостей) или Da Vinci Machine (построенная на JVM Java путём добавления новых байт-кодов в набор инструкций JVM) DLR создаётся на основе существующей виртуальной машины .NET Framework от Common Language Runtime[22].
См. также
- Da Vinci Machine – проект, начатый в Sun Microsystems, который обеспечил поддержку динамических языков для платформы Java на уровне виртуальной машины Java (JVM)
- виртуальная машина Parrot
Ссылки
- MIX 07 - Silverlight сияет ярче! Дата обращения: 30 апреля 2007.
- Видеопрезентация MIX 07 - DEV02 - Просто приклей! Ruby и DLR в Silverlight. Дата обращения: 4 мая 2007. Архивировано 8 мая 2007 года.
- Динамическое мышление Джима Хугунина - Среда выполнения динамического языка (DLR). Дата обращения: 6 февраля 2008.
- Подробная информация об исходном пакете DLR-языков в сжатии - DLR в Debian. Дата обращения: 6 июля 2010.
- Подробная информация о DLR-языках с исходным кодом проясняется – DLR в Ubuntu. Дата обращения: 6 июля 2010.
- Управляемая система типов JScript от Пратапа Лакшмана. Дата обращения: 28 января 2008. Архивировано 8 декабря 2013 года.
Внешние ссылки
- docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/dynamic-language-runtime-overview — официальный сайт Dynamic Language Runtime Overview
- Проект Dynamic Language Runtime на сайте GitHub


