Общие сведения о среде DLR
Среда DLR представляет собой среду выполнения, которая добавляет набор служб для динамических языков в среду CLR. Среда DLR упрощает разработку динамических языков, используемых в .NET Framework, и добавление динамических функций в языки со статической типизацией.
В динамических языках тип объекта может определяться во время выполнения, тогда как в языках со статической типизацией, например C# и Visual Basic (при использовании Option Explicit On
), типы объектов следует указывать во время разработки. Примерами динамических языков могут служить Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra и Groovy.
Большинство динамических языков предоставляют разработчикам указанные ниже преимущества.
Возможность использования цикла быстрой обратной связи (REPL или цикл "read-eval-print"). Он позволяет вводить несколько операторов и сразу же выполнять их для просмотра результатов.
Поддержка разработки "сверху вниз" и более традиционной — "снизу вверх". Например, при использовании метода "сверху вниз" можно вызывать пока еще не реализованные функции, а затем добавлять базовые реализации по мере необходимости.
Более простой рефакторинг и изменение кода, так как нет необходимости изменять объявления статических типов в коде.
Динамические языки позволяют создавать качественные скриптовые языки. Пользователи могут легко расширить приложения, созданные с использованием динамических языков, с помощью новых команд и функциональных возможностей. Динамические языки также часто используются для создания веб-сайтов и окружений тестов, обслуживания ферм серверов, разработки различных служебных программ и выполнения преобразования данных.
Назначение среды DLR — обеспечение работы системы динамических языков в .NET Framework и взаимодействия с .NET. Среда DLR добавляет динамические объекты в C# и Visual Basic для поддержки динамического поведения в этих языках и реализации взаимодействия с динамическими языками.
Среда DLR также упрощает создание библиотек, поддерживающих динамические операции. Например, если имеется библиотека, использующая объекты XML или нотации объектов JavaScript (JSON), эти объекты могут являться динамическими для языков, использующих среду DLR. Это позволяет пользователям библиотек создавать синтаксически более простой и более естественный код для работы с объектами и для доступа к членам объектов.
Например, для увеличения значения счетчика в формате XML в C# можно использовать приведенный ниже код.
Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);
Вместо него для этой же операции можно использовать приведенный ниже код в среде DLR.
scriptobj.Count += 1;
Как и CLR, среда DLR является частью .NET Framework и поставляется в установочных пакетах .NET Framework и Visual Studio. Версия среды DLR с открытым исходным кодом доступна для скачивания в репозитории IronLanguages/dlr на сайте GitHub.
Примечание
Версия среды DLR с открытым исходным кодом обладает той же функциональностью, что и среда DLR, входящая в Visual Studio и .NET Framework. Она также обеспечивает дополнительную поддержку для разработчиков языков. Дополнительные сведения см. в документации по репозиторию IronLanguages/dlr на сайте GitHub.
Примеры языков, разработанных с помощью среды DLR, включают перечисленные ниже.
- IronPython. Доступен в качестве программного обеспечения с открытым исходным кодом на веб-сайте GitHub.
Основные преимущества среды DLR
Среда DLR предоставляет следующие преимущества.
Упрощает перенос динамических языков в .NET Framework
Среда DLR позволяет разработчикам языков избежать создания лексических анализаторов, средств синтаксического анализа, семантических анализаторов, генераторов кода и других средств, которые обычно приходится создавать самостоятельно. Для использования среды DLR язык должен создать деревья выражений, которые представляют код на уровне языка в виде древовидной структуры, вспомогательные процедуры среды выполнения и необязательные динамические объекты, реализующие интерфейс IDynamicMetaObjectProvider. Среда DLR и платформа .NET Framework автоматизируют значительное количество задач анализа и генерации кода. Это позволяет разработчикам языков сконцентрировать свои усилия на уникальных функциях языка.
Обеспечивает динамические функции в языках со статической типизацией
Существующие языки .NET Framework (такие как C# и Visual Basic) могут создавать динамические объекты и использовать их совместно с объектами со статической типизацией. Например, в C# и Visual Basic могут использоваться динамические объекты для HTML, Document Object Model (DOM) и отражения .NET.
Обеспечивает будущие преимущества среды DLR и .NET Framework
Языки, реализованные с использованием среды DLR, могут быть улучшены в будущем за счет усовершенствований среды DLR и платформы .NET Framework. Например, если выпускается новая версия .NET Framework с усовершенствованным сборщиком мусора или меньшим временем загрузки сборок, языки, реализованные с использованием среды DLR, сразу же получат те же преимущества. Если в среде DLR усовершенствуется оптимизация (например, повысится эффективность компиляции), производительность повысится и для всех языков, реализованных с использованием среды DLR.
Обеспечивает общий доступ к библиотекам и объектам
Объекты и библиотеки, реализованные на одном языке, могут использоваться другими языками. Среда DLR также обеспечивает взаимодействие языков со статической и динамической типизацией. Например, в C# может быть объявлен динамический объект, использующий библиотеку, написанную на динамическом языке. Вместе с этим динамические языки могут использовать библиотеки из .NET Framework.
Обеспечивает быструю динамическую диспетчеризацию и вызов
Среда DLR обеспечивает быстрое выполнение динамических операций за счет поддержки усовершенствованного полиморфного кэширования. Среда DLR создает правила для операций привязки, использующих объекты для необходимых реализаций среды выполнения, а затем кэширует эти правила, чтобы избежать ресурсоемких вычислений привязок во время последовательного выполнения того же кода с теми же типами объектов.
Архитектура среды DLR
Ниже показана архитектура среды DLR.
Архитектура DLR
Среда DLR добавляет в среду CLR ряд служб для лучшей поддержки динамических языков. К ним относятся перечисленные ниже службы.
Деревья выражений. Среда DLR использует деревья выражений для представления семантики языка. С этой целью в среде DLR имеются расширенные деревья выражений LINQ, включающие в себя поток управления, назначение и другие узлы моделирования языков. Дополнительные сведения см. в разделах Деревья выражений (C#) или Деревья выражений (Visual Basic).
Кэширование места вызова. Динамическое место вызова — это часть кода, в которой выполняется такая операция с динамическими объектами, как
a + b
илиa.b()
. Среда DLR кэширует характеристикиa
иb
(как правило, типы этих объектов) и сведения об операции. Если такая операция выполнялась ранее, среда DLR извлекает всю необходимую информацию из кэша для быстрой отправки.Взаимодействие динамических объектов. Среда DLR предоставляет набор классов и интерфейсов, которые представляют динамические объекты и операции и могут использоваться разработчиками языков и динамических библиотек. Эти классы и интерфейсы включают IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject и ExpandoObject.
Среда DLR использует модули привязки в местах вызова для связи не только с .NET Framework, но и с другими инфраструктурами и службами, включая Silverlight и COM. Модули привязки инкапсулируют семантику языка и указывают способ выполнения операций в месте вызова с помощью деревьев выражений. Это обеспечивает для языков с динамической и статической типизацией, использующих среду DLR, совместный доступ к библиотекам и всем технологиям, поддерживаемым средой DLR.
Документация по среде DLR
Дополнительные сведения об использовании версии среды DLR с открытым исходным кодом для добавления динамических функций в язык или об использовании динамического языка с .NET Framework см. в документации в репозитории IronLanguages/dlr на сайте GitHub.
См. также
Обратная связь
Отправить и просмотреть отзыв по