Erkunden der dynamischen Sprachlaufzeit in .Net

Statisch typisierte Sprachen sind solche, in denen Sie den Typ eines Objekts zum Zeitpunkt der Definition angeben müssen. Beispiele für statisch typisierte Sprachen sind C #, VB und C ++. Im Gegensatz dazu wird in dynamisch typisierten Sprachen der Typ eines Objekts zur Laufzeit bestimmt - nur zu dem Zeitpunkt, zu dem dem Typ ein Wert zugewiesen wird. Python, Ruby und JavaScript sind Beispiele für dynamisch typisierte Sprachen.

Das DLR (Dynamic Language Runtime) wird über dem CLR (Common Language Runtime) ausgeführt und verleiht der verwalteten Umgebung von .Net Dynamik. Sie können damit dynamische Funktionen in Ihrer Anwendung implementieren. Im Wesentlichen ermöglicht das DLR die Interoperabilität zwischen statisch und dynamisch typisierten Sprachen im Kontext der CLR. Mit dem DLR können Sie Bibliotheken und Objekte für dynamische Sprachen freigeben. In diesem Artikel möchte ich einen Überblick über die Dynamic Language Runtime-Umgebung in Microsoft .Net geben.

Sie können eine Open Source-Version des DLR von Codeplex erhalten.

Was ist das DLR?

Das DLR ist das Ergebnis der Bemühungen von Microsoft, Dienste über der CLR auszuführen und Interoperabilität zwischen statisch und dynamisch typisierten Sprachen bereitzustellen. Die Unterstützung der Dynamic Language Runtime-Umgebung wird durch den System.Dynamic-Namespace erleichtert. In der MSDN heißt es: "Die DLR (Dynamic Language Runtime) ist eine Laufzeitumgebung, die der Common Language Runtime (CLR) eine Reihe von Diensten für dynamische Sprachen hinzufügt. Die DLR erleichtert die Entwicklung dynamischer Sprachen für die Ausführung auf dem .NET Framework und um statisch typisierten Sprachen dynamische Funktionen hinzuzufügen. "

Wie ist es hilfreich?

Die vom DLR angebotenen Dienste umfassen die Unterstützung eines dynamischen Typsystems, eines Standard-Hosting-Modells sowie die Generierung und den Versand von dynamischem Code. Auf einen Blick bietet das DLR folgende Vorteile:

  1. Bietet Unterstützung für dynamische Funktionen in statisch typisierten Sprachen. Mit dem DLR können Sie dynamisch typisierte Objekte erstellen und diese zusammen mit Ihren statisch typisierten Objekten in Ihrer Anwendung verwenden.
  2. Ermöglicht die nahtlose Portierung dynamischer Sprachen in das .Net Framework. Mit dem DLR können Sie dynamische Sprachen einfach in das .NET Framework portieren. Um die DLR-Funktionen nutzen zu können, müssen Sie lediglich die Möglichkeit haben, Ausdrucksbäume und Routinen für die Laufzeithilfe zu erstellen.
  3. Erleichtert das Teilen von Bibliotheken und Objekten. Mit dem DLR können Sie Objekte und Bibliotheken in einer Sprache erstellen, auf die aus einer anderen Sprache zugegriffen werden kann.
  4. Bietet Unterstützung für den Versand und Aufruf dynamischer Methoden. Das DLR unterstützt den dynamischen Methodenaufruf und -versand mithilfe des erweiterten polymorphen Caching.

Das Dynamic Language Runtime-Subsystem

Das DLR-Subsystem besteht im Wesentlichen aus den drei Schichten. Dazu gehören die folgenden:

  1. Ausdrucksbäume - Das DLR verwendet Ausdrucksbäume zur Darstellung der Sprachsemantik.
  2. Call Site Caching - Methodenaufrufe mit dynamischen Objekten werden im Speicher zwischengespeichert, damit das DLR den Cache-Verlauf für nachfolgende Aufrufe derselben Methode für einen schnelleren Versand verwenden kann.
  3. Dynamische Objektinteroperabilität - Das DLR ermöglicht die Interoperabilität zwischen statisch und dynamisch typisierten Sprachen. Das DLR enthält eine Sammlung von Typen - Klassen und Schnittstellen im System.Dynamic-Namespace. Sie können die IDynamicMetaObjectProvider-Schnittstelle und die DynamicMetaObject-, DynamicObject- und ExpandoObject-Klassen nutzen, um dynamische Frameworks zu erstellen.

Sprachbinder

Die Sprachbinder im DLR helfen ihm, mit anderen Sprachen zu sprechen. Daher haben Sie für jede dynamische Sprache normalerweise einen Ordner, der mit ihr interagieren kann. Im Folgenden sind als Beispiel die im DLR häufig verwendeten Bindemittel aufgeführt.

  • .Net Binder - Dies wird verwendet, um mit .Net-Objekten zu kommunizieren
  • JavaScript-Ordner - Hiermit können Sie mit Objekten kommunizieren, die in JavaScript-Objekten erstellt wurden
  • IronRuby Binder - Ermöglicht dem DLR die Kommunikation mit IronRuby-Objekten
  • IronPython Binder - Hilft dem DLR, mit IronPython-Objekten zu kommunizieren
  • COM-Ordner - Dies hilft dem DLR, mit COM-Objekten zu kommunizieren

Das Schlüsselwort "dynamisch"

Sie können das dynamische Schlüsselwort verwenden, um auf ein dynamisches Objekt zuzugreifen. Das dynamische Schlüsselwort wurde erstmals in .Net Framework 4 eingeführt. Es ermöglicht Ihrer Anwendung die Zusammenarbeit mit dynamischen Typen. Sie können also das dynamische Schlüsselwort verwenden, um auf ein COM-Objekt oder ein Objekt zuzugreifen, das in dynamischen Sprachen wie Python, Ruby oder JavaScript erstellt wurde.

Hier ist ein Code-Snippet, das zeigt, wie das dynamische Schlüsselwort verwendet werden kann.

using System.Dynamic;

dynamic excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");

Wir müssen keine Reflektion mehr verwenden, um auf COM-Objekte zuzugreifen - Ihr Code ist ohne den Reflektionscode, den Sie sonst ohne das dynamische Schlüsselwort hätten schreiben müssen, sehr sauber.

Lesevorschläge

//msdn.microsoft.com/en-us/library/dd233052(v=vs.110).aspx