Динамическая языковая среда выполнения
Оригинальный автор(ы) | Команда Microsoft Dynamic Language Runtime |
---|---|
Разработчик(и) | Фонд .NET |
Первоначальный выпуск | 16 апреля 2010 г |
Стабильная версия | 1.3.1 / 2 декабря 2021 г [1] |
Репозиторий | github |
Написано в | С# |
Операционная система | Windows , macOS , Linux ( Debian , Ubuntu ) |
Платформа | Общая языковая инфраструктура |
Тип | Системная платформа |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | документы |
Среда выполнения динамического языка ( DLR ) от Microsoft работает поверх среды выполнения общего языка (CLR) и предоставляет компьютерного языка службы для динамических языков . Эти услуги включают в себя:
- Система динамических типов , которая будет использоваться всеми языками, использующими службы DLR.
- Динамическая отправка метода
- Динамическая генерация кода
- API хостинга
DLR используется для реализации динамических языков в .NET Framework , включая проекты IronPython и IronRuby .
Поскольку реализации динамического языка используют общую базовую систему, им должно быть проще взаимодействовать друг с другом. Например, должна быть возможность использовать библиотеки любого динамического языка на любом другом динамическом языке. Кроме того, API-интерфейс хостинга обеспечивает взаимодействие со статически типизированными языками CLI , такими как 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 4 , также в апреле 2010 года, DLR был включен в саму .NET Framework. [6]
Проект DLR с открытым исходным кодом, размещенный на GitHub, имеет несколько дополнительных функций для разработчиков языка. После выпуска в июле 2010 года в течение нескольких лет в проекте не было активности. Разработчик Microsoft, работавший над IronRuby, интерпретировал это как отсутствие приверженности Microsoft динамическим языкам в .NET Framework. [7] [8] Однако с 2016/17 года ведется регулярная деятельность, которая привела к ряду улучшений и обновлений.
Языковые реализации
[ редактировать ]В 2007 году Microsoft первоначально планировала использовать DLR для будущих версий Visual Basic 2010 (VB 10.0) и Managed JScript ( ECMAScript 3.0), а также Python и Ruby. [2] [9] [10] [11] [12]
Результатом работы DLR над Ruby и Python стали IronRuby , .NET-реализация языка Ruby , и IronPython . [2]
К августу 2009 года Microsoft объявила, что больше не планирует внедрять Managed JScript в DLR. [13] Позже Фредрик Хольмстрем независимо разработал реализацию JavaScript для DLR, которую он назвал «IronJS» в соответствии с традицией именования IronPython и IronRuby.
Как и C# , Visual Basic может получать доступ к объектам динамических языков, созданных на основе DLR, таких как IronPython и IronRuby . [14] [15]
PowerShell 3.0, выпущенный в Windows 8 , был обновлен для использования DLR. [16]
IronScheme , реализация схемы , [17] планировал развивать DLR. От этой идеи отказались, поскольку используемая в проекте ветка DLR стала рассинхронизироваться с магистральной , а также потому, что (по словам координатора проекта) текущая на тот момент версия DLR не могла поддерживать большинство требований Scheme. [18]
Архитектура
[ редактировать ]Среда выполнения динамического языка построена на идее, что можно реализовать особенности языка поверх общего , не зависящего от языка абстрактного синтаксического дерева , узлы которого соответствуют определенной функциональности, общей для многих динамических языков. [19] В основе этой архитектуры лежит идея о том, что количество элементарных языковых конструкций, которые необходимо реализовать в общем стеке, должно быть по своей сути ограничено. [20] DLR динамически генерирует код, соответствующий функциональности, выраженной этими узлами. Компилятор любого динамического языка, реализованного поверх DLR, должен генерировать абстрактные деревья DLR и передавать их библиотекам DLR.
DLR обеспечивает динамически обновляемые DynamicSite
объекты, которые кэшируют задачу привязки методов к объектам. Поскольку тип объекта, а также элементы, которые он содержит, в динамических языках могут меняться в течение жизни программы, вызов метода должен проверять список методов, чтобы убедиться, что вызов является допустимым. DynamicSite
объекты представляют и кэшируют состояние объекта и его методов; любое обновление объекта отражается в DynamicSite
объекты тоже. DLR маршрутизирует все вызовы методов через DynamicSite
объектов, который затем выполняет быстрый поиск и привязку метода к фактической реализации. [21]
В отличие от других проектов, таких как виртуальная машина Parrot (без каких-либо зависимостей) или Da Vinci Machine (построенная на основе Java JVM путем добавления новых байт-кодов в набор инструкций JVM ), DLR построена поверх существующей среды Common Language Runtime , . NET Framework виртуальная машина. [22]
См. также
[ редактировать ]- Da Vinci Machine - проект, стартовавший в Sun Microsystems, который обеспечил поддержку динамических языков в платформе Java на уровне виртуальной машины Java (JVM).
- Виртуальная машина Попугая
Ссылки
[ редактировать ]- ^ «Выпуски» . IronLanguages/длр. Гитхаб . Проверено 27 января 2022 г.
- ^ Jump up to: а б с Хугунин, Джим. «Среда выполнения динамического языка (DLR)» . Проверено 21 июня 2007 г.
В краткосрочной перспективе мы сосредоточены на использовании небольшого количества языков для запуска первой волны разработки DLR, где мы сможем тесно и лично сотрудничать с разработчиками, чтобы сгладить худшие недостатки в конструкции DLR. После этого начального этапа мы хотим обратиться к более широкому языковому сообществу.
- ^ Виланд, Дино (15 января 2008 г.). «Дорожная карта IronPython 2.0» . Архивировано из оригинала 6 сентября 2008 г. Проверено 9 февраля 2008 г.
На самом деле у нас нет такого документа, но общая цель — выпустить IronPython 2.0 к концу года. Что касается самой DLR, то планируется выпустить версию 1.0 примерно в то же время, что и IronPython 2.0.
- ^ «Архив CodePlex» .
- ^ «Архив CodePlex» . Архивировано из оригинала 14 августа 2011 г. Проверено 27 июля 2010 г.
- ^ «Обзор среды выполнения динамического языка — .NET Framework» .
- ^ «Microsoft Tyres of IronRuby; Джимми Шементи покидает корабль» . Rubyinside.com. 07.08.2010 . Проверено 26 февраля 2012 г.
Год назад команда сократилась вдвое, и наша гибкость была сильно ограничена. [..] В целом, я вижу серьезный недостаток приверженности IronRuby и динамическим языкам в .NET в целом.
- ^ «Динамические языки Microsoft умирают» . i-programmer.info. 10 августа 2010 г. Проверено 26 февраля 2012 г.
Без окончательного толчка к тому, чтобы языки работали в Visual Studio и интегрировались с дизайнером, оба языка Iron, вероятно, мертвы - и Microsoft, похоже, потеряла желание добиться их успеха.
- ^ «Объявлен управляемый JScript» . Проверено 4 мая 2007 г.
- ^ «Что, черт возьми, такое «VBx»?» . 01.05.2007. Архивировано из оригинала 25 мая 2009 г. Проверено 12 августа 2009 г.
В новой DLR появилась поддержка IronPython, IronRuby, Javascript и новой динамической компиляции VBx.
- ^ «Введение Mix, Silverlight, CoreCLR и DLR в контекст» . 01.05.2007 . Проверено 12 августа 2008 г.
- ^ «Знакомство с Visual Basic 10» . infoq.com. 04 мая 2007 г. Проверено 12 августа 2009 г.
VB 10 использует преимущества функции Silverlight, называемой средой выполнения динамического языка или DLR.
- ^ Чайлз, Билл (1 июня 2009 г.). «Будущее управляемого JScript (IronJScript)?» . Архивировано из оригинала 31 августа 2009 г. Проверено 12 августа 2009 г.
JScript DLR был экспериментальным для разработки дизайна DLR (деревья выражений, взаимодействие, сайты вызовов, хостинг и т. д.). JS, который мы выпустили с ASP Futures, и динамический пакет Silverlight стал очень старым и непригодным для использования, поскольку DLR продолжал развиваться для выпуска в CLR 4.0. К сожалению, в настоящее время нет планов по разработке и выпуску JScript, размещаемого в DLR.
- ^ «Что нового в Visual Basic 2010» . Майкрософт . 2009 . Проверено 12 августа 2009 г.
Visual Basic привязывается к объектам динамических языков, таких как IronPython и IronRuby.
- ^ «Пошаговое руководство. Создание и использование динамических объектов (C# и Visual Basic)» .
- ^ «PowerShell 3 – наконец-то в DLR!» . Архивировано из оригинала 28 апреля 2012 г. Проверено 30 марта 2012 г.
- ^ «Архив CodePlex» .
- ^ «Есть ли образец серебряного света?» . 11 мая 2009 г. Архивировано из оригинала 19 января 2013 года . Проверено 26 июля 2009 г.
К сожалению, моя ветка DLR сильно не синхронизирована с веткой Silverlight. Я как раз об этом подумал, возможно мне ДЛР лично не нужен, разберусь. Проблема в том, что DLR как есть недостаточно хорош для поддержки большинства требований схемы.
- ^ Хугунин, Джим (15 мая 2007 г.). «Деревья DLR (Часть 1)» . Проверено 23 февраля 2008 г.
Ключевой трюк реализации в DLR заключается в использовании такого рода деревьев для передачи кода в виде данных и сохранения кода в легко анализируемой и изменяемой форме как можно дольше.
- ^ Наттер, Чарльз (28 января 2008 г.). «Lang.NET 2008: Мысли первого дня» . Проверено 23 февраля 2008 г.
Идея состоит в том, что существует быстро сглаживающаяся асимптотическая кривая количества узлов дерева выражений, необходимых для реализации каждого нового языка. Так ли это, еще предстоит выяснить.
- ^ Билл Чайлс (октябрь 2007 г.). «CLR наизнанку: IronPython и среда выполнения динамического языка» . MSDN Журнал . Проверено 10 августа 2007 г.
- ^ Роуз, Джон (2 февраля 2008 г.). «Браво за динамичное исполнение!» . Архивировано из оригинала 6 февраля 2008 г. Проверено 23 февраля 2008 г.
Интересно отметить различия между расширениями CLR и JVM. Они работают совершенно выше уровня CLR, существенно его не расширяя, в то время как мы разрабатываем JVM и библиотеки одновременно.
- «MIX 07 — Silverlight сияет ярче!» . Проверено 30 апреля 2007 г.
- «Видеопрезентация MIX 07 — DEV02 — Просто склей! Руби и DLR в Silverlight» . Архивировано из оригинала 8 мая 2007 г. Проверено 4 мая 2007 г.
- «Динамическое мышление Джима Хугунина - среда выполнения динамического языка (DLR)» . Проверено 6 февраля 2008 г.
- «Подробная информация об исходном пакете dlr-languages в сжатии – DLR в Debian» . Проверено 6 июля 2010 г.
- «Подробная информация об исходном пакете dlr-languages в lucid – DLR в Ubuntu» . Проверено 6 июля 2010 г.
- «Бык Пратапа Лакшмана — система управляемых типов JScript» . Архивировано из оригинала 8 декабря 2013 г. Проверено 28 января 2008 г.
Внешние ссылки
[ редактировать ]