Übersicht über die Dynamic Language RuntimeDynamic Language Runtime Overview

Die Dynamic Language Runtime (DLR) ist eine Runtimeumgebung, die der Common Language Runtime (CLR) eine Reihe von Diensten für dynamische Sprachen hinzufügt.The dynamic language runtime (DLR) is a runtime environment that adds a set of services for dynamic languages to the common language runtime (CLR). Die DLR vereinfacht es, dynamische Sprachen für die Ausführung auf dem .NET Framework zu entwickeln und statisch typisierten Sprachen dynamische Funktionen hinzuzufügen.The DLR makes it easier to develop dynamic languages to run on the .NET Framework and to add dynamic features to statically typed languages.

Dynamische Sprachen können den Typ eines Objekts zur Runtime identifizieren, wobei Sie in statistisch typisierten Sprachen wie C# und Visual Basic (wenn Sie Option Explicit On verwenden) die Objekttypen zur Entwurfszeit angeben müssen.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. Beispiele für dynamische Sprachen sind Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra und Groovy.Examples of dynamic languages are Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra, and Groovy.

Die dynamischsten Sprachen bieten die folgenden Vorteile für Entwickler:Most dynamic languages provide the following advantages for developers:

  • Die Möglichkeit, schnelle Feedbackschleifen (REPL oder „Lesen-Auswerten-Ausgeben-Schleife“) zu verwenden.The ability to use a rapid feedback loop (REPL, or read-evaluate-print loop). Dadurch können Sie mehrere Anweisungen eingeben und sie sofort ausführen, um die Ergebnisse anzuzeigen.This lets you enter several statements and immediately execute them to see the results.

  • Unterstützung für Entwicklung „von oben“ und die traditionellere Entwicklung „von unten“.Support for both top-down development and more traditional bottom-up development. Wenn Sie z.B. einen „von oben“-Ansatz nutzen, können Sie Funktionen aufrufen, die noch nicht implementiert wurden und dann zugrunde liegende Implementierungen hinzufügen, wenn Sie diese benötigen.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.

  • Einfachere Umgestaltung und Codeänderung, da Sie die statischen Typdeklarationen im gesamten Code nicht verändern müssen.Easier refactoring and code modifications, because you do not have to change static type declarations throughout the code.

Dynamische Sprachen können hervorragende Skriptsprachen sein.Dynamic languages make excellent scripting languages. Kunden können Anwendungen leicht erweitern, die mithilfe dynamischer Sprachen mit neuen Befehlen und Funktionen erstellt wurden.Customers can easily extend applications created by using dynamic languages with new commands and functionality. Dynamische Sprachen werden auch häufig zum Erstellen von Websites und Testumgebungen verwendet, zudem zum Verwalten von Serverfarmen, zum Entwickeln verschiedenster Hilfsprogramme und zum Ausführen von Datentransformationen.Dynamic languages are also frequently used for creating Web sites and test harnesses, maintaining server farms, developing various utilities, and performing data transformations.

Der Zweck der DLR ist, einem System von dynamischen Sprachen zu erlauben, unter .NET Framework ausgeführt zu werden und diesen Sprachen .NET-Interoperabilität zu geben.The purpose of the DLR is to enable a system of dynamic languages to run on the .NET Framework and give them .NET interoperability. Die DLR fügt C# und Visual Basic dynamische Objekte hinzu, um dynamisches Verhalten in diesen Sprachen zu unterstützen und ihre Interoperation mit dynamischen Sprachen zu ermöglichen.The DLR adds dynamic objects to C# and Visual Basic to support dynamic behavior in these languages and enable their interoperation with dynamic languages.

Die DLR hilft Ihnen auch beim Erstellen von Bibliotheken, die dynamische Operationen unterstützen.The DLR also helps you create libraries that support dynamic operations. Wenn Sie beispielsweise über eine Bibliothek verfügen, die XML- oder JavaScript Object Notation-Objekte (JSON-Objekte) verwenden, können Ihre Objekte als dynamische Objekte für Sprachen, die DLR verwenden, erscheinen.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. Dadurch können Benutzer von Bibliotheken syntaktisch einfacheren und natürlicheren Code für das Arbeiten mit Objekten und den Zugriff auf Objektmember schreiben.This lets library users write syntactically simpler and more natural code for operating with objects and accessing object members.

Sie verwenden z.B. möglicherweise den folgenden Code, um einen Zähler in XML in C# zu inkrementieren.For example, you might use the following code to increment a counter in XML in C#.

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

Mit DLR können Sie den folgenden Code statt des gleichen Vorgangs verwenden.By using the DLR, you could use the following code instead for the same operation.

scriptobj.Count += 1;

Wie die CLR ist die DLR auch ein Teil von .NET Framework und wird mit dem .NET Framework und Installationspaketen von Visual Studio bereitgestellt.Like the CLR, the DLR is a part of the .NET Framework and is provided with the .NET Framework and Visual Studio installation packages. Die Open-Source-Version der DLR ist ebenso zum Download im Repository IronLanguages/dlr auf GitHub verfügbar.The open-source version of the DLR is also available for download on the IronLanguages/dlr repo on GitHub.

Hinweis

Die Open-Source-Version der DLR verfügt über alle Funktionen der DLR, die in Visual Studio und dem .NET Framework integriert ist.The open-source version of the DLR has all the features of the DLR that is included in Visual Studio and the .NET Framework. Es wird auch zusätzliche Unterstützung für Sprachimplementierungen geboten.It also provides additional support for language implementers. Weitere Informationen finden Sie in der Dokumentation im Repository IronLanguages/dlr auf GitHub.For more information, see the documentation on the IronLanguages/dlr repo on GitHub.

Beispiele von Sprachen, die mithilfe der DLR entwickelt wurden, enthalten Folgendes:Examples of languages developed by using the DLR include the following:

  • IronPython.IronPython. Als Open-Source-Software auf der GitHub-Website verfügbar.Available as open-source software from the GitHub Web site.

  • IronRubyIronRuby. Als Open-Source-Software auf der RubyForge-Website verfügbar.Available as open-source software from the RubyForge Web site.

Wesentliche Vorteile der DLRPrimary DLR Advantages

Die Verwendung der DLR bietet die folgenden Vorteile:The DLR provides the following advantages.

Vereinfacht das Übertragen von dynamischen Sprachen zu .NET FrameworkSimplifies Porting Dynamic Languages to the .NET Framework

Die DLR ermöglicht Verantwortlichen für die Sprachimplementierung die Erstellung lexikaler Analyzer, Parser, semantischer Analyzer, Codegeneratoren und anderen Tools, die sie normalerweise selbst hätten erstellen müssen.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. Damit die DLR verwendet werden kann, muss eine Sprache Ausdrucksbaumstrukturen erstellen, die den Code auf Sprachebene in einer verzweigten Struktur, in Runtimehilfsfunktionen und optionalen dynamischen Objekten darstellen, die die IDynamicMetaObjectProvider-Schnittstelle implementieren.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. Die DLR und .NET Framework automatisieren eine Menge Codeanalysen und CodegenerierungsaufgabenThe DLR and the .NET Framework automate a lot of code analysis and code generation tasks. Dadurch können sich Verantwortliche für die Sprachimplementierung auf eindeutige Sprachfunktionen konzentrieren.This enables language implementers to concentrate on unique language features.

Aktiviert dynamische Funktionen in statisch typisierten SprachenEnables Dynamic Features in Statically Typed Languages

Vorhandene .NET Framework-Sprachen wie C# und Visual Basic können dynamische Objekte erstellen und diese zusammen mit statisch typisierten Sprachen verwenden.Existing .NET Framework languages such as C# and Visual Basic can create dynamic objects and use them together with statically typed objects. C# und Visual Basic können z.B: dynamische Objekte für HTML, Dokumentobjektmodell (DOM) und .NET-Reflektion verwenden.For example, C# and Visual Basic can use dynamic objects for HTML, Document Object Model (DOM), and .NET reflection.

Bietet in der Zukunft Vorteile der DLR und .NET FrameworkProvides Future Benefits of the DLR and .NET Framework

Sprachen, die mithilfe der DLR erstellt wurden, können von zukünftigen DLR- und .NET Framework-Verbesserungen profitieren.Languages implemented by using the DLR can benefit from future DLR and .NET Framework improvements. Wenn .NET Framework beispielsweise eine neue Version veröffentlicht, die über einen verbesserten Garbage Collector oder eine schnellere Ladezeit für Assemblys verfügt, erhalten durch die DLR implementierten Sprachen sofort denselben Vorteil.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. Wenn die DLR Optimierungen hinzufügt, z.B. eine verbesserte Kompilierung, verbessert sich auch die Leistung für alle Sprachen, die mithilfe der DLR implementiert wurden.If the DLR adds optimizations such as better compilation, the performance also improves for all languages implemented by using the DLR.

Ermöglicht die Freigabe von Bibliotheken und ObjektenEnables Sharing of Libraries and Objects

Die in einer Sprache implementierten Objekte und Bibliotheken können von anderen Sprachen genutzt werden.The objects and libraries implemented in one language can be used by other languages. Die DLR lässt auch die Interoperation zwischen statistisch typisierten und dynamischen Sprachen zu.The DLR also enables interoperation between statically typed and dynamic languages. Zum Beispiel kann C# ein dynamisches Objekt deklarieren, das eine Bibliothek verwendet, die in einer dynamischen Sprache geschrieben ist.For example, C# can declare a dynamic object that uses a library that is written in a dynamic language. Gleichzeitig können dynamische Sprachen Bibliotheken aus .NET Framework verwenden.At the same time, dynamic languages can use libraries from the .NET Framework.

Bietet schnellen dynamischen Versand und AufrufProvides Fast Dynamic Dispatch and Invocation

Die DLR bietet eine schnelle Ausführung dynamischer Vorgänge durch Unterstützung des erweiterten polymorphen Zwischenspeicherns.The DLR provides fast execution of dynamic operations by supporting advanced polymorphic caching. Die DLR erstellt Regeln für das Binden von Vorgängen, die Objekte für die nötigen Runtime-Implementierungen verwenden, und speichert diese Regeln zwischen, um ressourcenermüdende Bindungsberechnungen während der aufeinander folgenden Ausführungen desselben Codes auf den gleichen Objekttypen zu vermeiden.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.

DLR-ArchitekturDLR Architecture

Die folgende Abbildung zeigt die Architektur der Dynamic Language Runtime.The following illustration shows the architecture of the dynamic language runtime.

Übersicht über die DLR-Architektur (Dynamic Language Runtime) DLR-ArchitekturDynamic Language Runtime Architecture Overview DLR architecture

Die DLR fügt der CLR eine Reihe von Diensten hinzu, um dynamische Sprachen besser zu unterstützen.The DLR adds a set of services to the CLR for better supporting dynamic languages. Einige dieser Dienste sind:These services include the following:

  • Ausdrucksbaumstrukturen.Expression trees. Die DLR verwendet Ausdrucksbaumstrukturen, um Sprachsemantik darzustellen.The DLR uses expression trees to represent language semantics. Zu diesem Zweck hat die DLR LINQ-Ausdrucksbaumstrukturen erweitert, um die Ablaufsteuerung, Zuweisung und andere Knoten für die Sprachmodellierung.For this purpose, the DLR has extended LINQ expression trees to include control flow, assignment, and other language-modeling nodes. Weitere Informationen finden Sie unter Ausdrucksbaumstrukturen (C#) oder Ausdrucksbaumstrukturen (Visual Basic).For more information, see Expression Trees (C#) or Expression Trees (Visual Basic).

  • Zwischenspeichern der Aufrufwebsite.Call site caching. Eine dynamische Aufrufwebsite ist ein Ort im Code, an dem Sie einen Vorgang wie a + b oder a.b() auf dynamischen Objekten ausführen können.A dynamic call site is a place in the code where you perform an operation like a + b or a.b() on dynamic objects. Die DLR speichert die Eigenschaften von a und b (normalerweise die Typen dieser Objekte) sowie Informationen über den Vorgang.The DLR caches the characteristics of a and b (usually the types of these objects) and information about the operation. Wenn solch ein Vorgang zuvor ausgeführt wurde, ruft die DLR alle nötigen Informationen aus dem Cache für den schnellen Versand ab.If such an operation has been performed previously, the DLR retrieves all the necessary information from the cache for fast dispatch.

  • Dynamische ObjektinteroperabilitätDynamic object interoperability. Die DLR stellt einen Satz von Klassen und Schnittstellen bereit, die dynamische Objekte und Vorgänge darstellen und von Verantwortlichen für die Sprachimplementierung und Autoren dynamischer Bibliotheken genutzt werden können.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. Diese Klassen und Schnittstellen enthalten IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject und ExpandoObject.These classes and interfaces include IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, and ExpandoObject.

Die DLR verwendet Binder in Aufrufwebsites, um nicht nur mit .NET Framework zu kommunizieren, sondern auch mit anderen Infrastrukturen und Diensten, einschließlich Silverlight und 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. Binder kapseln die Semantik einer Sprache ein und geben an, wie Vorgänge in einer Aufrufwebsite durchgeführt werden, indem Ausdrucksbaumstrukturen verwendet werden.Binders encapsulate a language's semantics and specify how to perform operations in a call site by using expression trees. Dadurch werden dynamische und statisch typisierte Sprachen aktiviert, die die DLR zum Freigeben von Bibliotheken und Erhalten von Zugriff auf alle Technologien verwenden, die die DLR unterstützt.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.

DLR-DokumentationDLR Documentation

Weitere Informationen zur Verwendung der Open-Source-Version der DLR zum Hinzufügen dynamischen Verhaltens zu einer Sprache oder Informationen darüber, wie Sie die Verwendung einer dynamischer Sprache mit .NET Framework aktivieren, finden Sie in der Dokumentation im Repository IronLanguages/dlr auf 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.

Siehe auchSee also