stringtranslate.com

Динамическая языковая среда выполнения

Dynamic Language Runtime ( DLR ) от Microsoft работает поверх Common Language Runtime (CLR) и предоставляет услуги компьютерного языка для динамических языков . Эти услуги включают:

DLR используется для реализации динамических языков на платформе .NET Framework , включая проекты IronPython и IronRuby .

Поскольку реализации динамического языка имеют общую базовую систему, им должно быть проще взаимодействовать друг с другом. Например, должно быть возможно использовать библиотеки из любого динамического языка в любом другом динамическом языке. Кроме того, API хостинга обеспечивает взаимодействие со статически типизированными языками CLI , такими как C# и Visual Basic .NET .

История

Проект Dynamic Language Runtime от Microsoft был анонсирован компанией Microsoft на выставке MIX 2007. [2] [3]

Microsoft выпустила .NET DLR 0.9 beta в ноябре 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 , реализация Scheme , [17] планировала строить на основе DLR. Эта идея была заброшена, поскольку ветвь DLR , используемая проектом, перестала синхронизироваться с trunk , а также потому, что (по словам координатора проекта) текущая версия DLR на тот момент не могла поддерживать большинство требований Scheme. [18]

Архитектура

Dynamic Language Runtime построен на идее, что можно реализовать языковые особенности поверх универсального абстрактного синтаксического дерева , не зависящего от языка , узлы которого соответствуют определенной функциональности, общей для многих динамических языков. [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]

Смотрите также

Ссылки

  1. ^ "Releases". IronLanguages/dlr. GitHub . Получено 2022-01-27 .
  2. ^ abc Hugunin, Jim. "A Dynamic Language Runtime (DLR)" . Получено 2007-06-21 . В краткосрочной перспективе мы сосредоточимся на использовании небольшого количества языков для управления первой волной разработки DLR, где мы сможем тесно и лицом к лицу работать с разработчиками, чтобы сгладить самые худшие изъяны в дизайне DLR. После этой начальной фазы мы хотим обратиться к более широкому языковому сообществу.
  3. ^ Viehland, Dino (2008-01-15). "Roadmap for IronPython 2.0". Архивировано из оригинала 2008-09-06 . Получено 2008-02-09 . У нас на самом деле нет такого документа, но общая цель — выпустить IronPython 2.0 к концу года. Для самого DLR план состоит в том, чтобы выпустить v1.0 примерно в то же время, что и IronPython 2.0.
  4. ^ "Архив CodePlex".
  5. ^ "Архив CodePlex". Архивировано из оригинала 2011-08-14 . Получено 2010-07-27 .
  6. ^ «Обзор среды выполнения динамического языка — .NET Framework».
  7. ^ "Microsoft Tires of IronRuby; Джимми Шементи покидает корабль". rubyinside.com. 2010-08-07 . Получено 2012-02-26 . Год назад команда сократилась вдвое, и наша гибкость была серьезно ограничена. [..] В целом, я вижу серьезную нехватку приверженности IronRuby и динамическим языкам в .NET в целом.
  8. ^ "Динамические языки Microsoft умирают". i-programmer.info. 2010-08-10 . Получено 2012-02-26 . Без окончательного толчка к тому, чтобы языки работали в Visual Studio и интегрировались с дизайнером, оба языка Iron, вероятно, мертвы, и Microsoft, похоже, утратила волю сделать их успешными.
  9. ^ "Анонсирован управляемый JScript" . Получено 2007-05-04 .
  10. ^ "Что за чертовщина "VBx"?". 2007-05-01. Архивировано из оригинала 2009-05-25 . Получено 2009-08-12 . С новым DLR у нас есть поддержка IronPython, IronRuby, Javascript и новой динамической компиляции VBx
  11. ^ "Введение Mix, Silverlight, CoreCLR и DLR в контекст". 2007-05-01 . Получено 2008-08-12 .
  12. ^ "Введение в Visual Basic 10". infoq.com. 2007-05-04 . Получено 2009-08-12 . VB 10 использует функцию Silverlight, называемую Dynamic Language Runtime или DLR
  13. ^ Chiles, Bill (2009-06-01). "Будущее управляемого JScript (IronJScript)?". Архивировано из оригинала 2009-08-31 . Получено 2009-08-12 . DLR JScript был экспериментальным для информирования о дизайне DLR (деревья выражений, взаимодействие, сайты вызовов, хостинг и т. д.). JS, который мы выпустили с asp futures и Silverlight dynamic sdk, стал очень старым и непригодным для использования, поскольку DLR продолжал развиваться для выпуска в CLR 4.0. К сожалению, в настоящее время нет планов по разработке и выпуску JScript, размещаемого в DLR.
  14. ^ "Что нового в Visual Basic 2010". Microsoft . 2009 . Получено 2009-08-12 . Visual Basic привязывается к объектам из динамических языков, таких как IronPython и IronRuby
  15. ^ «Пошаговое руководство: Создание и использование динамических объектов (C# и Visual Basic)».
  16. ^ "PowerShell 3 – Наконец-то в DLR!". Архивировано из оригинала 2012-04-28 . Получено 2012-03-30 .
  17. ^ "Архив CodePlex".
  18. ^ "Is there any silverlight sample?". 2009-05-11. Архивировано из оригинала 19 января 2013 г. Получено 2009-07-26 . К сожалению, моя ветка DLR сильно рассинхронизирована с веткой Silverlight. Я просто подумал об этом, возможно, мне не нужен DLR perse, буду изучать. Проблема в том, что DLR как таковой недостаточно хорош для поддержки большинства требований Схемы
  19. ^ Hugunin, Jim (2007-05-15). "DLR Trees (Part 1)" . Получено 2008-02-23 . Ключевой трюк реализации в DLR заключается в использовании таких деревьев для передачи кода в качестве данных и для сохранения кода в легко анализируемой и изменяемой форме как можно дольше.
  20. ^ Nutter, Charles (2008-01-28). "Lang.NET 2008: Day 1 Thoughts" . Получено 2008-02-23 . Идея заключается в том, что существует быстро сглаживающаяся асимптотическая кривая для числа узлов дерева выражений, необходимых для реализации каждого нового языка. Так ли это, еще предстоит выяснить.
  21. Билл Чайлз (октябрь 2007 г.). «CLR Inside Out: IronPython и динамическая языковая среда выполнения». Журнал MSDN . Получено 10 августа 2007 г.
  22. ^ Роуз, Джон (2008-02-02). "Браво за динамическую среду выполнения!". Архивировано из оригинала 2008-02-06 . Получено 2008-02-23 . Интересно отметить различия между расширениями CLR и JVM. Они работают полностью выше уровня CLR, не улучшая его существенно, в то время как мы разрабатываем JVM и библиотеки одновременно.

Внешние ссылки