Dynamic Language Runtime - .NET, quo vadis?
Golo Roden und ich haben am 13. Oktober angekündigt, jeweils zum ersten eines Monats jeweils ein Beitrag zu einem vorher festgelegten Thema zu veröffentlichen.
Die Überraschung bei diesen Veröffentlichungen ist beidseitig, da die Themen den Lesern zum Vornherein nicht bekannt sind und Golo sowie ich auch nicht wissen, was wir jeweils dazu geschrieben haben.
Heute ist es soweit und das Thema heisst: "Dynamic Language Runtime - .NET, quo vadis?"
Das Gegenstück zu diesem Beitrag findet sich auf dem Blog von Golo.
Die Laufzeitumgebung von .NET, CLR (Common Language Runtime) sollte jeder .NET-Entwickler zumindest mal gehört haben.
Unter anderem stellt die CLR für die auf ihr aufbauenden Sprachen gemeinsame Dienste bereit (Garbage Collection, JIT-Kompilierung, Sandbox-Sicherheitsmodell, ...).
Dies ergibt zwei wesentliche Vorteile:
- Neue Sprachen lassen sich aufgrund von gegebenen Gemeinsamkeiten in der Basis (CLR) leichter implementieren
Sprachen die auf der CLR aufbauen können jeweils auf anderen Sprachen aufbauen bzw. mit ihnen zusammenarbeiten (Bibliotheken in einer anderen Sprache wiederverwenden)
- Es gibt inzwischen dutzende von von Sprachen für .NET, eine Liste davon: http://dotnetpowered.com/languages.aspx, dabei sind nicht nur strukturierte, sondern auch funktionale Sprachen vorhanden.
Microsoft arbeitet schon länger an IronPhyton (http://www.codeplex.com/IronPython).
Im Rahmen dieses Projekts haben die Arbeiten an einer Dynamic Language Runtime begonnen, die jetzt als eigenständiges Projekt auf Codeplex verfügbar ist.
Die DLR stellt gemeinsame Services für alle Sprachen zur Verfügung, unter anderem ein dynamisches Typsystem und Services zur dynamischen Ausführung und Generierung von Code.
Die DLR wurde aufbauend zur CLR entwickelt, nutzt also dessen Implementation und wird dazu benutzt dynamische Programmiersprachen zu implementieren.
Ein grosser Unterschied stellt das dynamische Typsystem vs. dem statischen Typsystem (Bspw. C# / VB.NET) dar:
Dynamisches Typsystem (Typüberprüfung und Zuweisung zur Laufzeit)
- Langsamere Ausführung / dagegen schnellere Kompilierung, d.h. unter anderem das sich die Zeit des Bearbeiten / Testen / Debugging-Zyklus verringert
- Typen werden zur Laufzeit bei ihrer Benutzung überpprüft
- Absicherung gegen Fehler zur Entwicklungszeit mit der Nutzung von Unit Tests
Statisches Typsystem (Typüberprüfung und Zuweisung zur Kompilezeit)
- Schneller da die Typen zur Kompilezeit getestet werden
- Absicherung gegen Fehler zur Kompilezeit (Optional Unit Tests) und Laufzeitüberprüfung (Debugging)
Die Nutzung von dynamischen Programmiersprachen wird vielerorts im Bereich von Scripting und Plug- / AddIn-Systemen erläutert.
Auch stellt das Austauschen von Daten in Formaten die sich schnell ändern können (Bspw. XML-Formate) ein Nachteil für die statisch typisierten Sprachen dar und wiederum ein Vorteil für die dynamisch typisierten Sprachen (Parsen vs. dynamische Interpretierung bzw. Ausführung).
Bisher habe ich dieses Thema immer mit ein wenig Abstand beobachtet und ich konnte mir keinen richtigen Reim daraus machen. Im Laufe meiner Nachforschungen ist mir aber klar geworden, dass dieser Entwicklung Beachtung geschenkt werden muss.
Über kurz oder lang muss sich jeder wohl damit ein wenig auseinandersetzen, jedoch stellt die Entwicklung eine Erweiterung der Möglichkeiten dar und nicht die Verdrängung alter Möglichkeiten.
Für Interessierte, ein paar Links um sich weiter damit auseinanderzusetzen: