Przegląd środowiska uruchomieniowego języka dynamicznegoDynamic Language Runtime Overview

Środowisko uruchomieniowe języka dynamicznego (DLR) jest środowisko uruchomieniowe, który dodaje zestaw usług dla języków dynamicznych do środowisko uruchomieniowe języka wspólnego (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 sprawia, że łatwiej tworzyć języki dynamiczne, do uruchamiania na .NET Framework i dodawania funkcji dynamicznego do języków statycznie wpisane.The DLR makes it easier to develop dynamic languages to run on the .NET Framework and to add dynamic features to statically typed languages.

Języki dynamiczne można zidentyfikować typ obiektu w czasie wykonywania, natomiast w statycznie wpisane języków, takich jak C# i Visual Basic (Jeśli używasz Option Explicit On) należy określić typy obiektów w czasie projektowania.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. Przykładami języki dynamiczne są Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra i Groovy.Examples of dynamic languages are Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra, and Groovy.

Języki najbardziej dynamiczne zapewniają następujące korzyści dla deweloperów:Most dynamic languages provide the following advantages for developers:

  • Możliwość używania pętlę błyskawicznych opinii (REPL lub odczytu oceny — Drukuj pętli).The ability to use a rapid feedback loop (REPL, or read-evaluate-print loop). Dzięki temu można wprowadzić kilka instrukcji i natychmiast wykonać je, aby wyświetlić wyniki.This lets you enter several statements and immediately execute them to see the results.

  • Obsługa dla rozwoju góra dół i bardziej tradycyjny rozwoju od dołu do góry.Support for both top-down development and more traditional bottom-up development. Na przykład korzystając z podejścia góra dół, można wywoływać funkcje, które nie są jeszcze zaimplementowane, a następnie dodać podstawowej implementacji, gdy ich potrzebujesz.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.

  • Łatwiejsze refaktoryzacji i kodu modyfikacji, ponieważ nie trzeba zmienić deklaracje typu statycznego w całym kodzie.Easier refactoring and code modifications, because you do not have to change static type declarations throughout the code.

Języki dynamiczne należy doskonałą językach skryptów.Dynamic languages make excellent scripting languages. Klienci mogą łatwo rozbudowywać aplikacje utworzone przy użyciu języków dynamicznych nowe polecenia i funkcje.Customers can easily extend applications created by using dynamic languages with new commands and functionality. Języki dynamiczne są również często używane do tworzenia witryn sieci Web i test, wiązka, utrzymywanie farm serwerów, różne narzędzia do tworzenia i wykonywanie przekształceń danych.Dynamic languages are also frequently used for creating Web sites and test harnesses, maintaining server farms, developing various utilities, and performing data transformations.

Celem DLR jest aby włączyć system języków dynamicznych do uruchamiania na .NET Framework i nadaj im współdziałaniu .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 dodaje obiektów dynamicznych do języka C# i Visual Basic do obsługi dynamicznego działania w tych językach i włączanie ich współdziałanie języków dynamicznych.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 ułatwia również tworzenie bibliotek, które obsługują operacji dynamicznych.The DLR also helps you create libraries that support dynamic operations. Na przykład jeśli masz bibliotekę, która używa obiektów XML lub JavaScript Object Notation (JSON), może występować obiektów obiektów dynamicznych dla języków, które używają 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. Pozwala to użytkownikom bibliotekę w kodzie składniowo prostszy i bardziej naturalne na potrzeby świadczenia z obiektami i uzyskiwania dostępu do członków obiektu.This lets library users write syntactically simpler and more natural code for operating with objects and accessing object members.

Poniższy kod może na przykład użyć, aby zwiększyć licznik w formacie XML w języku C#.For example, you might use the following code to increment a counter in XML in C#.

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

Za pomocą DLR, możesz użyć następującego kodu zamiast tej samej operacji.By using the DLR, you could use the following code instead for the same operation.

scriptobj.Count += 1;

Podobnie jak CLR DLR jest częścią programu .NET Framework i jest dostarczana z pakiety instalacyjne systemu .NET Framework i programu 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. Jest również dostępna do pobrania w wersji typu open-source DLR IronLanguages/dlr repozytorium w witrynie GitHub.The open-source version of the DLR is also available for download on the IronLanguages/dlr repo on GitHub.

Uwaga

Wersja typu open-source DLR ma wszystkie funkcje DLR, który znajduje się w programie Visual Studio i .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. Zapewnia także dodatkową obsługę języka implementacje.It also provides additional support for language implementers. Aby uzyskać więcej informacji, zobacz dokumentację na IronLanguages/dlr repozytorium w witrynie GitHub.For more information, see the documentation on the IronLanguages/dlr repo on GitHub.

Przykłady opracowano na podstawie DLR języków są następujące:Examples of languages developed by using the DLR include the following:

  • IronPython.IronPython. Dostępne jako oprogramowanie open source z GitHub witryny sieci Web.Available as open-source software from the GitHub Web site.

  • IronRuby.IronRuby. Dostępne jako oprogramowanie open source z RubyForge witryny sieci Web.Available as open-source software from the RubyForge Web site.

Podstawowe zalety DLRPrimary DLR Advantages

DLR zapewnia następujące korzyści.The DLR provides the following advantages.

Upraszcza przenoszenie języki dynamiczne w .NET FrameworkSimplifies Porting Dynamic Languages to the .NET Framework

DLR umożliwia implementacji języka uniknąć tworzenia analizatory leksykalne, analizatory składni, analizatory semantyczne, generatorów kodu i inne narzędzia, które tradycyjnie było, aby utworzyć samodzielnie.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. Aby użyć DLR, język wymaga utworzenia drzew wyrażeń, reprezentujący kodu poziomu języka w strukturze drzewa w kształcie procedury pomocnika czasu wykonywania, i opcjonalnie dynamiczne obiekty, które implementuje IDynamicMetaObjectProvider interfejsu.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 i .NET Framework zautomatyzować wiele analizy kodu i zadania generowania kodu.The DLR and the .NET Framework automate a lot of code analysis and code generation tasks. Dzięki temu implementacji języka skoncentrować się na funkcje językowe unikatowy.This enables language implementers to concentrate on unique language features.

Umożliwia korzystanie z funkcji dynamicznego w językach statycznie wpisaneEnables Dynamic Features in Statically Typed Languages

Istniejące języków .NET Framework, takich jak C# i Visual Basic można tworzyć obiektów dynamicznych i ich używać z typami statycznymi obiektami.Existing .NET Framework languages such as C# and Visual Basic can create dynamic objects and use them together with statically typed objects. Na przykład C# i Visual Basic można użyć obiektów dynamicznych w celu odbicia HTML Document Object Model (DOM) i .NET.For example, C# and Visual Basic can use dynamic objects for HTML, Document Object Model (DOM), and .NET reflection.

Zalety przyszłych DLR i .NET FrameworkProvides Future Benefits of the DLR and .NET Framework

Języki implementowane przy użyciu DLR mogą korzystać z przyszłe ulepszenia DLR i .NET Framework.Languages implemented by using the DLR can benefit from future DLR and .NET Framework improvements. Na przykład .NET Framework wydaje nową wersję, która ma ulepszoną moduł odśmiecania pamięci lub zestawu szybciej czas ładowania, języki implementowane przy użyciu DLR natychmiast uzyskać takie same korzyści.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. Jeśli DLR dodaje optymalizacje, takie jak lepsza kompilacji, wydajność zwiększa również dla wszystkich języków implementowane przy użyciu DLR.If the DLR adds optimizations such as better compilation, the performance also improves for all languages implemented by using the DLR.

Umożliwia udostępnianie biblioteki i obiektówEnables Sharing of Libraries and Objects

Obiekty i biblioteki zaimplementowane w jednym języku może służyć przez innych języków.The objects and libraries implemented in one language can be used by other languages. DLR umożliwia także współdziałanie między językami statycznie wpisane i dynamicznych.The DLR also enables interoperation between statically typed and dynamic languages. Na przykład C# można zadeklarować obiekt dynamiczny, który używa biblioteki, która jest napisana w języku dynamicznych.For example, C# can declare a dynamic object that uses a library that is written in a dynamic language. W tym samym czasie języki dynamiczne mogą korzystać z bibliotek z programu .NET Framework.At the same time, dynamic languages can use libraries from the .NET Framework.

Zapewnia szybkie dynamicznej alokacji i wywołanieProvides Fast Dynamic Dispatch and Invocation

DLR zapewnia szybkie wykonywanie operacji dynamicznych dzięki obsłudze zaawansowane polimorficznych buforowania.The DLR provides fast execution of dynamic operations by supporting advanced polymorphic caching. DLR tworzy reguły dla powiązania operacji korzystających z obiektów do implementacji konieczne środowiska uruchomieniowego, a następnie buforuje te zasady, aby uniknąć wyczerpaniem zasobów powiązania obliczeń podczas kolejnymi wykonaniami ten sam kod na tych samych typach obiektów.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.

Architektura DLRDLR Architecture

Na poniższej ilustracji przedstawiono architekturę środowisko uruchomieniowe języka dynamicznego.The following illustration shows the architecture of the dynamic language runtime.

Dynamiczny przegląd architektury środowiska uruchomieniowego języka DLR architekturyDynamic Language Runtime Architecture Overview DLR architecture

DLR dodaje zestaw usług do środowiska CLR dla lepiej obsługuje języki dynamiczne.The DLR adds a set of services to the CLR for better supporting dynamic languages. Te usługi są następujące:These services include the following:

  • Drzewa wyrażeń.Expression trees. DLR używa drzew wyrażeń, który reprezentuje semantykę języka.The DLR uses expression trees to represent language semantics. W tym celu DLR ma rozszerzone drzew wyrażeń LINQ do uwzględnienia przepływ sterowania, przypisywania i inne węzły modelowanie języka.For this purpose, the DLR has extended LINQ expression trees to include control flow, assignment, and other language-modeling nodes. Aby uzyskać więcej informacji, zobacz drzew wyrażeń (C#) lub drzew wyrażeń (Visual Basic).For more information, see Expression Trees (C#) or Expression Trees (Visual Basic).

  • Wywołaj buforowanie lokacji.Call site caching. A witryny wywołania dynamicznego to miejsce w kodzie, gdzie można wykonać operacji, takiej jak a + b lub a.b() obiektów dynamicznych.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 buforuje charakterystyki a i b (zazwyczaj typy tych obiektów) i informacje na temat operacji.The DLR caches the characteristics of a and b (usually the types of these objects) and information about the operation. Jeśli taka operacja została wykonana wcześniej, DLR pobiera wszystkie niezbędne informacje z pamięci podręcznej na potrzeby szybkiego wysyłania.If such an operation has been performed previously, the DLR retrieves all the necessary information from the cache for fast dispatch.

  • Współdziałanie obiekt dynamiczny.Dynamic object interoperability. DLR zawiera zestaw klas i interfejsów, które reprezentują obiektów dynamicznych i operacje i mogą być używane przez implementacji języka i autorzy bibliotekami dynamicznymi.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. Te klasy i interfejsy obejmują IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, i ExpandoObject.These classes and interfaces include IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, and ExpandoObject.

DLR używa integratorów wywołania do komunikowania się nie tylko przy użyciu programu .NET Framework, ale z innymi infrastruktur i usług, w tym programu Silverlight i modelu 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. Integratorów hermetyzacji semantykę języka i określ, jak wykonywać operacje w witrynie wywołania przy użyciu drzew wyrażeń.Binders encapsulate a language's semantics and specify how to perform operations in a call site by using expression trees. To umożliwia dynamiczne i statycznie wpisane języki, które umożliwiają DLR Udostępnianie biblioteki i uzyskać dostęp do wszystkich technologii, które obsługuje 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.

Dokumentacja DLRDLR Documentation

Aby uzyskać więcej informacji o sposobie używania wersji "open source" DLR dodanie zachowania dynamiczny język lub o tym, jak umożliwia korzystanie z języka dynamicznego przy użyciu programu .NET Framework, zobacz dokumentację na IronLanguages/dlr repozytorium w witrynie 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.

Zobacz takżeSee also