Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die dynamische Sprachlaufzeit (DLR) ist eine Laufzeitumgebung, in der der Common Language Runtime (CLR) eine Reihe von Diensten für dynamische Sprachen hinzugefügt wird. Das DLR erleichtert die Entwicklung dynamischer Sprachen zur Ausführung auf .NET und das Hinzufügen dynamischer Features zu statisch typierten Sprachen.
Dynamische Sprachen können den Typ eines Objekts zur Laufzeit identifizieren, während Sie in statisch eingegebenen Sprachen wie C# und Visual Basic (bei Verwendung Option Explicit On
) Objekttypen zur Entwurfszeit angeben müssen. Beispiele für dynamische Sprachen sind Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra und Groovy.
Die meisten dynamischen Sprachen bieten Entwicklern die folgenden Vorteile:
- Die Möglichkeit, schnelle Feedbackschleifen (REPL oder „Lesen-Auswerten-Ausgeben-Schleife“) zu verwenden. Auf diese Weise können Sie mehrere Anweisungen eingeben und sofort ausführen, um die Ergebnisse anzuzeigen.
- Unterstützung für top-down-Entwicklung und herkömmlichere Bottom-Up-Entwicklung. Wenn Sie beispielsweise einen Top-Down-Ansatz verwenden, können Sie Funktionen aufrufen, die noch nicht implementiert sind, und dann zugrunde liegende Implementierungen hinzufügen, wenn Sie sie benötigen.
- Einfachere Umgestaltung und Codeänderungen, da Sie keine statischen Typdeklarationen im gesamten Code ändern müssen.
Dynamische Sprachen eignen sich hervorragend als Skriptsprachen. Kunden können Anwendungen, die mit dynamischen Sprachen erstellt werden, ganz einfach mit neuen Befehlen und Funktionen erweitern. Dynamische Sprachen werden auch häufig zum Erstellen von Websites und Testumgebung verwendet, serverfarmen verwalten, verschiedene Dienstprogramme entwickeln und Datentransformationen durchführen.
Ziel des DLR ist es, ein System dynamischer Sprachen zur Ausführung auf .NET zu ermöglichen und ihnen .NET-Interoperabilität zu verleihen. Das DLR fügt dynamische Objekte zu C# und Visual Basic hinzu, um dynamisches Verhalten in diesen Sprachen zu unterstützen und die Interoperabilität mit dynamischen Sprachen zu ermöglichen.
Das DLR hilft Ihnen auch beim Erstellen von Bibliotheken, die dynamische Vorgänge unterstützen. Wenn Sie beispielsweise über eine Bibliothek verfügen, die XML- oder JavaScript Object Notation (JSON)-Objekte verwendet, können Ihre Objekte für Sprachen, die das DLR verwenden, als dynamische Objekte angezeigt werden. Dadurch können Bibliotheksbenutzer syntaktisch einfacheren und natürlicheren Code schreiben, um mit Objekten zu arbeiten und auf Objektelemente zuzugreifen.
Sie können beispielsweise den folgenden Code verwenden, um einen Zähler in XML in C# zu erhöhen.
Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);
Mit dem DLR können Sie stattdessen den folgenden Code für denselben Vorgang verwenden.
scriptobj.Count += 1;
Wie die CLR ist das DLR Teil von .NET. Es steht zum Download auf dem IronLanguages/dlr Repo auf GitHub zur Verfügung.
IronPython ist ein Beispiel für eine Sprache, die mit dem DLR entwickelt wurde.
Primäre DLR-Vorteile
Das DLR bietet die folgenden Vorteile.
Vereinfacht das Portieren dynamischer Sprachen zu .NET.
Mit dem DLR können Sprachimplementierer die Erstellung lexikalischer Analysegeräte, Parser, semantischer Analysegeräte, Codegeneratoren und anderer Tools vermeiden, die sie traditionell selbst erstellen mussten. Um das DLR zu verwenden, muss eine Sprache Ausdrucksstrukturen erzeugen, die den Code auf Sprachebene in einer baumartigen Struktur darstellen, sowie Laufzeit-Hilfsroutinen und optionale dynamische Objekte, die die IDynamicMetaObjectProvider Schnittstelle implementieren. Das DLR und .NET automatisieren viele Codeanalyse- und Codegenerierungsaufgaben. Dadurch können sich Sprachimplementierer auf einzigartige Sprachfeatures konzentrieren.
Aktiviert dynamische Features in statisch eingegebenen Sprachen
Vorhandene .NET-Sprachen wie C# und Visual Basic können dynamische Objekte erstellen und zusammen mit statisch typierten Objekten verwenden. Beispielsweise kann C# und Visual Basic dynamische Objekte für HTML, Document Object Model (DOM) und Spiegelung verwenden.
Bietet zukünftige Vorteile des DLR und .NET
Durch die Verwendung des DLR implementierte Sprachen können von zukünftigen DLR- und .NET-Verbesserungen profitieren. Wenn .NET z. B. eine neue Version veröffentlicht, die einen verbesserten Garbage Collector oder schnellere Assemblyladezeit aufweist, erhalten sprachen, die mithilfe des DLR implementiert werden, sofort den gleichen Vorteil. Wenn das DLR Optimierungen wie eine bessere Kompilierung hinzufügt, verbessert sich die Leistung auch für alle Sprachen, die mit dem DLR implementiert werden.
Ermöglicht die Freigabe von Bibliotheken und Objekten
Die in einer Sprache implementierten Objekte und Bibliotheken können von anderen Sprachen verwendet werden. Das DLR ermöglicht auch die Interoperabilität zwischen statisch typierten und dynamischen Sprachen. Beispielsweise kann C# ein dynamisches Objekt deklarieren, das eine Bibliothek verwendet, die in einer dynamischen Sprache geschrieben ist. Gleichzeitig können dynamische Sprachen Bibliotheken aus .NET Framework verwenden.
Bietet schnellen dynamischen Versand und Aufruf
Das DLR bietet schnelle Ausführung dynamischer Vorgänge durch die Unterstützung erweiterter polymorpher Zwischenspeicherung. Das DLR erstellt Regeln für Bindungsvorgänge, die Objekte für die erforderlichen Laufzeitimplementierungen verwenden, und speichert diese Regeln dann zwischen, um ressourcenausschöpfende Bindungsberechnungen während aufeinander folgender Ausführung desselben Codes für dieselben Objekttypen zu vermeiden.
DLR-Architektur
Das DLR fügt dem CLR eine Reihe von Diensten hinzu, um dynamische Sprachen besser zu unterstützen. Zu diesen Diensten gehören:
Ausdrucksbäume. Das DLR verwendet Ausdrucksstrukturen zur Darstellung der Sprachsemantik. Hierzu hat das DLR LINQ-Ausdrucksbäume erweitert, um Steuerungsfluss, Zuordnung und andere Knoten zur Sprachmodellierung einzuschließen. Weitere Informationen finden Sie unter Expression Trees (C#) oder Expression Trees (Visual Basic).
Zwischenspeichern der Aufrufwebsite. Eine dynamische Aufrufwebsite ist ein Ort im Code, an dem Sie einen Vorgang wie
a + b
odera.b()
für dynamische Objekte ausführen. Das DLR speichert die Eigenschaften vona
undb
(in der Regel die Typen dieser Objekte) und Informationen über den Betrieb. Wenn ein solcher Vorgang zuvor durchgeführt wurde, ruft das DLR alle notwendigen Informationen aus dem Cache für den schnellen Versand ab.Interoperabilität dynamischer Objekte. Das DLR bietet eine Reihe von Klassen und Schnittstellen, die dynamische Objekte und Vorgänge darstellen und von Sprachimplementierern und Autoren dynamischer Bibliotheken verwendet werden können. Diese Klassen und Schnittstellen umfassen IDynamicMetaObjectProvider, , DynamicMetaObject, DynamicObjectund ExpandoObject.
Das DLR verwendet Ordner in Anrufstandorten, um nicht nur mit .NET, sondern auch mit anderen Infrastrukturen und Diensten wie COM zu kommunizieren. Binder kapseln die Semantik einer Sprache und spezifizieren, wie Vorgänge an einer Aufrufstelle mithilfe von Ausdrucksbäumen ausgeführt werden. Dies ermöglicht dynamische und statisch typierte Sprachen, die das DLR verwenden, um Bibliotheken zu teilen und Zugriff auf alle technologien zu erhalten, die das DLR unterstützt.
DLR-Dokumentation
Weitere Informationen zur Verwendung der Open Source-Version des DLR zum Hinzufügen eines dynamischen Verhaltens zu einer Sprache oder zum Aktivieren der Verwendung einer dynamischen Sprache mit .NET finden Sie in der Dokumentation zum IronLanguages/dlr-Repo auf GitHub.