Общие сведения о среде DLRDynamic Language Runtime Overview

Среда DLR представляет собой среду выполнения, которая добавляет набор служб для динамических языков в среду CLR.The dynamic language runtime (DLR) is a runtime environment that adds a set of services for dynamic languages to the common language runtime (CLR). Среда DLR упрощает разработку динамических языков, используемых в .NET Framework, и добавление динамических функций в языки со статической типизацией.The DLR makes it easier to develop dynamic languages to run on the .NET Framework and to add dynamic features to statically typed languages.

В динамических языках тип объекта может определяться во время выполнения, тогда как в языках со статической типизацией, например C# и Visual Basic (при использовании Option Explicit On), типы объектов следует указывать во время разработки.Dynamic languages can identify the type of an object at run time, whereas in statically typed languages such as C# and Visual Basic (when you use Option Explicit On) you must specify object types at design time. Примерами динамических языков могут служить Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra и Groovy.Examples of dynamic languages are Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra, and Groovy.

Большинство динамических языков предоставляют разработчикам указанные ниже преимущества.Most dynamic languages provide the following advantages for developers:

  • Возможность использования цикла быстрой обратной связи (REPL или цикл "read-eval-print").The ability to use a rapid feedback loop (REPL, or read-evaluate-print loop). Он позволяет вводить несколько операторов и сразу же выполнять их для просмотра результатов.This lets you enter several statements and immediately execute them to see the results.

  • Поддержка разработки "сверху вниз" и более традиционной — "снизу вверх".Support for both top-down development and more traditional bottom-up development. Например, при использовании метода "сверху вниз" можно вызывать пока еще не реализованные функции, а затем добавлять базовые реализации по мере необходимости.For example, when you use a top-down approach, you can call functions that are not yet implemented and then add underlying implementations when you need them.

  • Более простой рефакторинг и изменение кода, так как нет необходимости изменять объявления статических типов в коде.Easier refactoring and code modifications, because you do not have to change static type declarations throughout the code.

Динамические языки позволяют создавать качественные скриптовые языки.Dynamic languages make excellent scripting languages. Пользователи могут легко расширить приложения, созданные с использованием динамических языков, с помощью новых команд и функциональных возможностей.Customers can easily extend applications created by using dynamic languages with new commands and functionality. Динамические языки также часто используются для создания веб-сайтов и окружений тестов, обслуживания ферм серверов, разработки различных служебных программ и выполнения преобразования данных.Dynamic languages are also frequently used for creating Web sites and test harnesses, maintaining server farms, developing various utilities, and performing data transformations.

Назначение среды DLR — обеспечение работы системы динамических языков в .NET Framework и взаимодействия с .NET.The purpose of the DLR is to enable a system of dynamic languages to run on the .NET Framework and give them .NET interoperability. Среда DLR добавляет динамические объекты в C# и Visual Basic для поддержки динамического поведения в этих языках и реализации взаимодействия с динамическими языками.The DLR adds dynamic objects to C# and Visual Basic to support dynamic behavior in these languages and enable their interoperation with dynamic languages.

Среда DLR также упрощает создание библиотек, поддерживающих динамические операции.The DLR also helps you create libraries that support dynamic operations. Например, если имеется библиотека, использующая объекты XML или нотации объектов JavaScript (JSON), эти объекты могут являться динамическими для языков, использующих среду DLR.For example, if you have a library that uses XML or JavaScript Object Notation (JSON) objects, your objects can appear as dynamic objects to languages that use the DLR. Это позволяет пользователям библиотек создавать синтаксически более простой и более естественный код для работы с объектами и для доступа к членам объектов.This lets library users write syntactically simpler and more natural code for operating with objects and accessing object members.

Например, для увеличения значения счетчика в формате XML в C# можно использовать приведенный ниже код.For example, you might use the following code to increment a counter in XML in C#.

Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);

Вместо него для этой же операции можно использовать приведенный ниже код в среде DLR.By using the DLR, you could use the following code instead for the same operation.

scriptobj.Count += 1;

Как и CLR, среда DLR является частью .NET Framework и поставляется в установочных пакетах .NET Framework и Visual Studio.Like the CLR, the DLR is a part of the .NET Framework and is provided with the .NET Framework and Visual Studio installation packages. Версия среды DLR с открытым исходным кодом доступна для скачивания в репозитории IronLanguages/dlr на сайте GitHub.The open-source version of the DLR is also available for download on the IronLanguages/dlr repo on GitHub.

Примечание

Версия среды DLR с открытым исходным кодом обладает той же функциональностью, что и среда DLR, входящая в Visual Studio и .NET Framework.The open-source version of the DLR has all the features of the DLR that is included in Visual Studio and the .NET Framework. Она также обеспечивает дополнительную поддержку для разработчиков языков.It also provides additional support for language implementers. Дополнительные сведения см. в документации по репозиторию IronLanguages/dlr на сайте GitHub.For more information, see the documentation on the IronLanguages/dlr repo on GitHub.

Примеры языков, разработанных с помощью среды DLR, включают перечисленные ниже.Examples of languages developed by using the DLR include the following:

  • IronPython.IronPython. Доступен в качестве программного обеспечения с открытым исходным кодом на веб-сайте GitHub.Available as open-source software from the GitHub Web site.

  • IronRuby.IronRuby. Доступен в качестве программного обеспечения с открытым исходным кодом на веб-сайте RubyForge.Available as open-source software from the RubyForge Web site.

Основные преимущества среды DLRPrimary DLR Advantages

Среда DLR предоставляет следующие преимущества.The DLR provides the following advantages.

Упрощает перенос динамических языков в .NET FrameworkSimplifies Porting Dynamic Languages to the .NET Framework

Среда DLR позволяет разработчикам языков избежать создания лексических анализаторов, средств синтаксического анализа, семантических анализаторов, генераторов кода и других средств, которые обычно приходится создавать самостоятельно.The DLR allows language implementers to avoid creating lexical analyzers, parsers, semantic analyzers, code generators, and other tools that they traditionally had to create themselves. Для использования среды DLR язык должен создать деревья выражений, которые представляют код на уровне языка в виде древовидной структуры, вспомогательные процедуры среды выполнения и необязательные динамические объекты, реализующие интерфейс IDynamicMetaObjectProvider.To use the DLR, a language needs to produce expression trees, which represent language-level code in a tree-shaped structure, runtime helper routines, and optional dynamic objects that implement the IDynamicMetaObjectProvider interface. Среда DLR и платформа .NET Framework автоматизируют значительное количество задач анализа и генерации кода.The DLR and the .NET Framework automate a lot of code analysis and code generation tasks. Это позволяет разработчикам языков сконцентрировать свои усилия на уникальных функциях языка.This enables language implementers to concentrate on unique language features.

Обеспечивает динамические функции в языках со статической типизациейEnables Dynamic Features in Statically Typed Languages

Существующие языки .NET Framework (такие как C# и Visual Basic) могут создавать динамические объекты и использовать их совместно с объектами со статической типизацией.Existing .NET Framework languages such as C# and Visual Basic can create dynamic objects and use them together with statically typed objects. Например, в C# и Visual Basic могут использоваться динамические объекты для HTML, Document Object Model (DOM) и отражения .NET.For example, C# and Visual Basic can use dynamic objects for HTML, Document Object Model (DOM), and .NET reflection.

Обеспечивает будущие преимущества среды DLR и .NET FrameworkProvides Future Benefits of the DLR and .NET Framework

Языки, реализованные с использованием среды DLR, могут быть улучшены в будущем за счет усовершенствований среды DLR и платформы .NET Framework.Languages implemented by using the DLR can benefit from future DLR and .NET Framework improvements. Например, если выпускается новая версия .NET Framework с усовершенствованным сборщиком мусора или меньшим временем загрузки сборок, языки, реализованные с использованием среды DLR, сразу же получат те же преимущества.For example, if the .NET Framework releases a new version that has an improved garbage collector or faster assembly loading time, languages implemented by using the DLR immediately get the same benefit. Если в среде DLR усовершенствуется оптимизация (например, повысится эффективность компиляции), производительность повысится и для всех языков, реализованных с использованием среды DLR.If the DLR adds optimizations such as better compilation, the performance also improves for all languages implemented by using the DLR.

Обеспечивает общий доступ к библиотекам и объектамEnables Sharing of Libraries and Objects

Объекты и библиотеки, реализованные на одном языке, могут использоваться другими языками.The objects and libraries implemented in one language can be used by other languages. Среда DLR также обеспечивает взаимодействие языков со статической и динамической типизацией.The DLR also enables interoperation between statically typed and dynamic languages. Например, в C# может быть объявлен динамический объект, использующий библиотеку, написанную на динамическом языке.For example, C# can declare a dynamic object that uses a library that is written in a dynamic language. Вместе с этим динамические языки могут использовать библиотеки из .NET Framework.At the same time, dynamic languages can use libraries from the .NET Framework.

Обеспечивает быструю динамическую диспетчеризацию и вызовProvides Fast Dynamic Dispatch and Invocation

Среда DLR обеспечивает быстрое выполнение динамических операций за счет поддержки усовершенствованного полиморфного кэширования.The DLR provides fast execution of dynamic operations by supporting advanced polymorphic caching. Среда DLR создает правила для операций привязки, использующих объекты для необходимых реализаций среды выполнения, а затем кэширует эти правила, чтобы избежать ресурсоемких вычислений привязок во время последовательного выполнения того же кода с теми же типами объектов.The DLR creates rules for binding operations that use objects to the necessary runtime implementations and then caches these rules to avoid resource-exhausting binding computations during successive executions of the same code on the same types of objects.

Архитектура среды DLRDLR Architecture

Ниже показана архитектура среды DLR.The following illustration shows the architecture of the dynamic language runtime.

Обзор архитектуры DLR архитектура DLRDynamic Language Runtime Architecture Overview DLR architecture

Среда DLR добавляет в среду CLR ряд служб для лучшей поддержки динамических языков.The DLR adds a set of services to the CLR for better supporting dynamic languages. К ним относятся перечисленные ниже службы.These services include the following:

  • Деревья выражений.Expression trees. Среда DLR использует деревья выражений для представления семантики языка.The DLR uses expression trees to represent language semantics. С этой целью в среде DLR имеются расширенные деревья выражений LINQ, включающие в себя поток управления, назначение и другие узлы моделирования языков.For this purpose, the DLR has extended LINQ expression trees to include control flow, assignment, and other language-modeling nodes. Дополнительные сведения см. в разделах Деревья выражений (C#) или Деревья выражений (Visual Basic).For more information, see Expression Trees (C#) or Expression Trees (Visual Basic).

  • Кэширование места вызова.Call site caching. Динамическое место вызова — это часть кода, в которой выполняется такая операция с динамическими объектами, как a + b или a.b().A dynamic call site is a place in the code where you perform an operation like a + b or a.b() on dynamic objects. Среда DLR кэширует характеристики a и b (как правило, типы этих объектов) и сведения об операции.The DLR caches the characteristics of a and b (usually the types of these objects) and information about the operation. Если такая операция выполнялась ранее, среда DLR извлекает всю необходимую информацию из кэша для быстрой отправки.If such an operation has been performed previously, the DLR retrieves all the necessary information from the cache for fast dispatch.

  • Взаимодействие динамических объектов.Dynamic object interoperability. Среда DLR предоставляет набор классов и интерфейсов, которые представляют динамические объекты и операции и могут использоваться разработчиками языков и динамических библиотек.The DLR provides a set of classes and interfaces that represent dynamic objects and operations and can be used by language implementers and authors of dynamic libraries. Эти классы и интерфейсы включают IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject и ExpandoObject.These classes and interfaces include IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, and ExpandoObject.

Среда DLR использует модули привязки в местах вызова для связи не только с .NET Framework, но и с другими инфраструктурами и службами, включая Silverlight и COM.The DLR uses binders in call sites to communicate not only with the .NET Framework, but with other infrastructures and services, including Silverlight and COM. Модули привязки инкапсулируют семантику языка и указывают способ выполнения операций в месте вызова с помощью деревьев выражений.Binders encapsulate a language's semantics and specify how to perform operations in a call site by using expression trees. Это обеспечивает для языков с динамической и статической типизацией, использующих среду DLR, совместный доступ к библиотекам и всем технологиям, поддерживаемым средой DLR.This enables dynamic and statically typed languages that use the DLR to share libraries and gain access to all the technologies that the DLR supports.

Документация по среде DLRDLR Documentation

Дополнительные сведения об использовании версии среды DLR с открытым исходным кодом для добавления динамических функций в язык или об использовании динамического языка с .NET Framework см. в документации в репозитории IronLanguages/dlr на сайте GitHub.For more information about how to use the open source version of the DLR to add dynamic behavior to a language, or about how to enable the use of a dynamic language with the .NET Framework, see the documentation on the IronLanguages/dlr repo on GitHub.

См. такжеSee also