Автор (ы) оригинала | Microsoft Dynamic Language Runtime Team |
---|---|
Разработчик (и) | .NET Foundation |
Первоначальный выпуск | 16 апреля 2010 г.; 10 лет назад (16.04.2010) |
Стабильный выпуск | 1.2.3 / 27 апреля 2020 г.; 5 месяцев назад (2020-04-27) |
Репозиторий | github.com / IronLanguages / dlr |
Написано в | C# |
Операционной системе | Windows, macOS, Linux (Debian, Ubuntu ) |
Platform | Common Language Infrastructure |
Тип | Системная платформа |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | docs.microsoft.com / en-us / dotnet / framework / Reflection-and -codedom / dynamic-language-runtime-overview |
Среда выполнения динамического языка (DLR ) от Microsoft работает поверх Common Language Runtime (CLR) и предоставляет службы компьютерного языка для динамических языков. Эти службы включают:
DLR используется для реализации динамических языков на .NET Framework, включая проекты IronPython и IronRuby.
Bec Поскольку реализации динамического языка используют общую базовую систему, им должно быть проще взаимодействовать друг с другом. Например, должна быть возможность использовать библиотеки любого динамического языка на любом другом динамическом языке. Кроме того, API-интерфейс хостинга обеспечивает взаимодействие со статически типизированными языками интерфейса командной строки, такими как C # и Visual Basic.NET.
Проект Microsoft Dynamic Language Runtime был анонсирован Microsoft на MIX 2007.
Microsoft выпустила бета-версию.NET DLR 0.9 в ноябре 2008 г. и последнюю версию 0.9 в декабре 2008 г. Версия 1.0 была выпущена в апреле 2010 г. В июле 2010 г. Microsoft изменила лицензию DLR с Microsoft Public Лицензия на лицензию Apache 2.0. С выпуском .NET 4, также в апреле 2010 года, DLR был включен в саму.NET Framework.
Проект DLR с открытым исходным кодом, размещенный на GitHub, имеет несколько дополнительных функций для разработчиков языка. После выпуска в июле 2010 года в течение нескольких лет над проектом было мало активности. Это было интерпретировано разработчиком Microsoft, работавшим над IronRuby, как недостаток приверженности Microsoft к динамическим языкам в.NET Framework. Однако с 2016/17 года ведется регулярная деятельность, которая привела к ряду улучшений и обновлений.
Службы DLR в настоящее время используются в разрабатываемой версии IronRuby,.NET-реализации языка Ruby, а также для IronPython.
В 2007 году Microsoft планировала использовать DLR для следующих версий Visual Basic 2010 (VB 10.0) и Managed JScript (ECMAScript 3.0). Однако по состоянию на август 2009 года Microsoft больше не планирует внедрять управляемый JScript в DLR. Как и C #, Visual Basic может получать доступ к объектам из динамических языков, построенных на DLR, таких как IronPython и IronRuby.
PowerShell 3.0, выпущенных в Windows. 8, был обновлен для использования DLR.
IronScheme, реализация Scheme, планировала построить на основе DLR. От этой идеи отказались, потому что ветка DLR , используемая проектом, рассинхронизировалась с магистралью, а также потому, что (по словам координатора проекта) текущая версия DLR при этом time не может поддерживать большинство требований Scheme.
Среда выполнения динамического языка построена на идее, что можно реализовать особенности языка поверх общего языка- agnostic абстрактное синтаксическое дерево, узлы которого соответствуют определенной функциональности, которая является общей для многих динамических языков. Эта архитектура основана на идее о том, что количество элементарных языковых конструкций, которые должны быть реализованы в универсальном стеке, должно быть ограничено по своей сути. DLR динамически генерирует код, соответствующий функциональным возможностям, выраженным этими узлами. Компилятор любого динамического языка, реализованного поверх DLR, должен генерировать абстрактные деревья DLR и передавать их библиотекам DLR.
DLR предоставляет динамически обновляемые объекты DynamicSite
, которые кэшируют задачу привязки методов к объектам. Поскольку тип объекта, а также содержащиеся в нем элементы в динамических языках могут изменяться в течение времени существования программы, вызов метода должен проверять список методов, чтобы убедиться, что вызов действителен. DynamicSite
объекты представляют и кэшируют состояние объекта и его методов; любое обновление объекта также отражается в объектах DynamicSite
. DLR направляет все вызовы методов через объекты DynamicSite
, которые затем выполняют быстрый поиск и привязку метода к фактической реализации.
В отличие от других усилий, таких как виртуальная машина Parrot (без зависимостей) или Da Vinci Machine (построенная на Java JVM путем добавления новых байт-кодов в набор инструкций JVM ), DLR построен на основе существующей Common Language Runtime, виртуальной машины .NET Framework.