Microsofts CoreRT verwandelt C # in plattformübergreifendes C ++

Microsoft ändert die .NET-Toolchain langsam, um eine frühzeitige Kompilierung für Anwendungen auf Plattformen zu ermöglichen, auf denen es keine .NET-Toolchain gibt.

Das Open-Source-CoreRT-Projekt macht die Verwendung der Standard-Befehlszeilenlaufzeit (Command Line Runtime, CLR) von .Net zum Ausführen von Anwendungen überflüssig. Stattdessen wird C ++ - Code aus dem Code einer bestimmten .NET C # -App generiert, der dann auf jeder Zielplattform, die C ++ unterstützt, kompiliert und verknüpft werden kann.

In einem Beitrag auf dem AlphaGeek-Entwicklungsblog von Microsoft erläuterte Microsoft kurz seine Pläne für die Funktionsweise von CoreRT sowie die Gründe für dessen Erstellung.

"Wenn ich wirklich etwas C # -Code schreiben möchte und es auf einem neuen IoT-Gerät" nur funktionieren "soll", schrieb Microsoft, "habe ich keine Optionen, bis das RyuJIT in der Lage ist, Maschinencode zu generieren, der mit diesem Prozessor und Betriebssystem." Durch Cross-Compilieren von C # zu C ++ können .NET-Entwickler ihre Anwendungen dann bereitstellen, ohne auf die Bereitstellung von .Net auf einer bestimmten Plattform warten zu müssen, so Microsoft.

Microsoft stellte fest, dass im Laufe des Jahres einige bedeutende Prozesse in Richtung dieses Ziels durchgeführt wurden, räumte jedoch ein, dass die Aufgabe leichter gesagt als getan ist. Das auffälligste Problem tritt häufig bei Projekten auf, bei denen eine Sprache in eine andere übertragen wird. C ++ und .Net haben keine Eins-zu-Eins-Entsprechung zwischen ihren Funktionen - der Syntax, den Datenstrukturen, der Sprachlogik usw. Daher muss CoreRT bestimmte .NET-Funktionen elegant in C ++ abbilden.

Ein weiteres wichtiges Projekt, das eine Sprache in C ++ transpiliert, um ihre Ausführung zu beschleunigen, ist Nuitka, das Python-Programme in C ++ konvertiert. Nuitka ist ein laufendes Projekt, das mit vielen der gleichen Probleme wie CoreRT konfrontiert ist und möglicherweise noch schwieriger zu lösen ist. Die dynamische Natur von Python macht es schwierig, in eine vorab kompilierte Sprache zu konvertieren, da jede Konstruktion in der Sprache möglicherweise ein Objekt mit stark veränderlichen Eigenschaften ist. C # ist von diesem Standpunkt aus weniger problematisch, da es die statische Typisierung für Variablen verwendet, aber wie oben erwähnt, bringt es immer noch eine Reihe von Schwierigkeiten mit sich.

Es gibt eine Menge an CoreRT, die direkt von der laufenden Neuausrichtung von Microsoft in Bezug auf Open Source- und beliebte Nicht-Microsoft-Technologien abhängt. Microsoft war jedoch immer pragmatisch, warum dies so ist, und hier geht es im Pragmatismus darum zu sehen, wie .NET-Anwendungen auf Plattformen und in Ökosystemen ausgeführt werden können, die sie zuvor nicht unterstützt haben.

CoreRT kann theoretisch die Reichweite des .Net-Ökosystems erweitern, ohne dass Microsoft übermäßige Anstrengungen unternehmen muss. Es ist einfacher, ein einmaliges Transpilationssystem von C # nach C ++ zu schreiben, als Laufzeiten für eine beliebige Anzahl anderer Zielplattformen zu erstellen. Sicher, Dritte können solche Laufzeiten erstellen, da .Net jetzt ein Open-Source-Unternehmen ist. Microsoft plant jedoch, einen Weg zu finden, um ihnen - und sich selbst - die Probleme zu ersparen.