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 |
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[англ.] в 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].
.NET | |
---|---|
Реализации | |
Архитектура | |
Инфраструктура |
|
Языки Microsoft | |
Другие языки | |
Windows Foundations | |
Компоненты | |
Сравнения | |
Будущие технологии | |
Информационные ресурсы |
Общая информация |
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Программное обеспечение |
| ||||||||||||
Лицензии | |||||||||||||
Связанные темы |
| ||||||||||||