Welche Beziehung besteht zwischen der Dynamic Language Runtime und C # 4.0?

11

Angenommen, ich wollte einen dynamischen Sprachcompiler / -interpreter, möglicherweise einen Scheme-Interpreter, auf der heutigen .NET-Plattform erstellen. Wäre es besser, die Dynamic Language Runtime (DLR) oder C # 4.0 zu verwenden, um die dynamischen Funktionen meiner Sprache zu implementieren? Oder brauche ich beides?

Ich weiß, dass in diesem Bereich andere Arbeiten durchgeführt wurden, insbesondere mit IronScheme und IronPython . Beide Sprachen nutzen das DLR; Ich glaube, IronPython verwendet die aktuellste Version des DLR (die ungefähr ein Jahr alt ist), während IronScheme eine frühe, stark modifizierte Gabel einer frühen Version des DLR verwendet. C # 4.0 war jedoch nicht verfügbar, als diese Compiler erstellt wurden.

Ich habe Rob Conerys Arbeit mit Massive gesehen, bei der die dynamischen Funktionen von C # 4.0 verwendet wurden. es ist ziemlich beeindruckend. Aber würde C # dem vollen Aufwand eines dynamischen Sprachcompilers / -interpreten standhalten? Gibt es Funktionen im DLR, die in C # fehlen, oder wurde das DLR im Wesentlichen in C # 4.0 integriert? Würde ich wichtige Funktionen des DLR vermissen, wenn ich nur ausschließlich C # 4.0 verwenden würde?

Robert Harvey
quelle
Ich glaube, dass die .Net 4.0 Dynamic-Funktionen auch auf dem DLR basieren.
Dave Nay
@ Dave: Ich würde mich über einen aktuellen, maßgeblichen Link zu einem Artikel freuen, der die Beziehung zwischen der .NET 4.0-Laufzeit und dem DLR ausführlich beschreibt. Dies würde mir eine gute Vorstellung davon geben, ob das dynamische Typsystem in C # 4.0 robust genug ist und ob es kritische Funktionen im DLR gibt, die in der .NET 4.0-Laufzeit weggelassen wurden. Ich habe einige Artikel gefunden, aber sie wurden alle an dem Tag geschrieben, als das DLR Gestalt annahm, und viele davon sind spekulativ.
Robert Harvey

Antworten:

3

Dies ist der Artikel, an den ich mich erinnere. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Später wurde das DLR auch in .NET Framework 4 aufgenommen, um dynamische Funktionen in C # und Visual Basic zu unterstützen. Wenn Sie nur das dynamische Schlüsselwort in C # 4 benötigen, können Sie einfach .NET Framework verwenden. In den meisten Fällen werden alle Interaktionen mit dem DLR selbst ausgeführt. Wenn Sie jedoch eine neue dynamische Sprache in .NET implementieren oder portieren möchten, können Sie von den zusätzlichen Hilfsklassen im Open Source-Projekt profitieren, das mehr Funktionen und Dienste für Sprachimplementierer bietet.

Dave Nay
quelle
3

Von: Jimmysch

Robert,

Die Fakten: IronRuby und IronPython verwenden beide das DLR. Tatsächlich stammen die meisten Funktionen des DLR aus einer früheren Implementierung von IronPython. Ich weiß nicht, wie welche Version des DLR IronScheme verwendet wird. Ein Teil des DLR (Microsoft.Scripting.Core.dll) wurde in .NET 4.0 in System.Core.dll ausgeliefert, und dieser Teil wird von C # 4.0 für die Unterstützung "dynamischer" Schlüsselwörter verwendet, weshalb diese Assembly nicht verwendet wird vorhanden in .NET 4.0 Builds des DLR.

Der Rest der Codebasis des DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll sind die wichtigsten) kann von diesem CodePlex-Projekt oder dem GitLub-Projekt IronLanguages heruntergeladen werden . Sie bieten die APIs für Verbraucher und Hersteller von Hosting-Sprachen, während die APIs in .NET 4.0 für den tatsächlichen dynamischen Versand von Methoden vorgesehen sind.

Um einen dynamischen Sprachcompiler für .NET 4.0 zu schreiben, würde ich C # als Implementierungssprache verwenden und das DLR als Bibliothek zur Vereinfachung allgemeiner Compileraufgaben verwenden. Eine einfache Beispielsprache zum DLR finden Sie unter Sympl.

~ Jimmy

http://dlr.codeplex.com/discussions/268746#post656778

Robert Harvey
quelle