IL2C ist ein Übersetzer (Transpiler) von ECMA-335 CIL/MSIL in die C-Sprache.
Unser Ziel ist:
Bessere Vorhersagbarkeit der Laufzeitkosten
Bessere menschliche Lesbarkeit des von IL2C übersetzten C-Quellcodes.
Sehr geringer Platzbedarf
Wir denken darüber nach, wie wir von einem großen System mit vielen Ressourcen zu einem kleinen eingebetteten System passen können. (KB-Reihenfolge für das Nicht-OS-System)
Bessere Code-/Laufzeitportabilität
Mindestanforderung ist nur ein C99-Compiler. Das Laufzeitminimum erfordert nur den Heap, CAS-Anweisungen, das (POSIX-)Signal und setjmp/longjmp. Eine weitere bessere Funktion ist die Threading-API (Win32, pthreads und FreeRTOS).
Bessere Interoperabilität für vorhandene C-Bibliotheken
Sie können die standardmäßigen .NET-Interop-Techniken (wie P/Invoke) verwenden.
Enthält nahtlose Gebäudesysteme für die wichtigsten C-Toolkits
zum Beispiel: CMake-System, Arduino IDE, VC++ ...
Ursprünglicher C#-Quellcode:
öffentliche statische Klasse HelloWorld{public static void Main(){Console.WriteLine("Hallo Welt mit IL2C!");}}
In C-Quellcode übersetzt (alle Kommentare wurden entfernt):
IL2C_CONST_STRING(string0__, L"Hallo Welt mit IL2C!");void HelloWorld_Main() {struct{const IL2C_EXECUTION_FRAME* pNext__;const uint16_t objRefCount__;const uint16_t valueCount__;System_String* stack0_0__; } frame__ = { NULL, 1, 0 };il2c_link_execution_frame(&frame__);frame__.stack0_0__ = string0__;System_Console_WriteLine_10(frame__.stack0_0__);il2c_unlink_execution_frame(&frame__);return; }
Ansicht mit Kommentaren/anderen Beispielübersetzungsergebnissen (enthalten komplexe Ergebnisse)
Der aktuelle Status von IL2C ist experimentell . Lesen Sie für den ersten Schritt ein einfaches „Erste Schritte“.
Wenn Sie umfassende Kenntnisse zu IL2C benötigen, lesen Sie „Inside IL2C“.
Die folgenden Listen werden durch Unit-Test automatisch generiert.
Liste der unterstützten IL-Opcodes
Unterstützte Grundtypen
Unterstützte Laufzeitsystemfunktionen
Unterstützte Funktionen (alt)
Pakete | Master | entwickeln |
---|---|---|
IL2C.Build | ||
IL2C.Interop | ||
IL2C.Core | ||
IL2C.Runtime | ||
IL2C.Runtime.msvc | ||
IL2C.Runtime.Arduino | (Konstruieren) | (Konstruieren) |
Konfiguration | Master |
---|---|
Veröffentlichen | |
Debuggen | |
Freigeben |
Konfiguration | entwickeln |
---|---|
Veröffentlichen | |
Debuggen | |
Freigeben |
Unter Apache v2.
Folie: Archiv IL2C erstellen
Enthält allgemeine Informationen über internes IL2C.
Sitzung Nr. 6–52 in der Konferenz dotNET 600 2018.
Folie: Gemeinsam schreiben, überall ausführen
#6-51 Sitzung in der dotNET 600 2017-Konferenz
Sitzungsvideo (Japanisch)
Polnischer Notationsrechner: Minimale, aber nützliche Impls für „Win32“, „UEFI“ und „M5Stack(ESP32)“
Folie: Wie man den Rechner erstellt / Archiv IL2C erstellen
#6-52 Sitzung in .NET Fringe Japan 2018
Folie: Archiv IL2C erstellen
#6-53-Sitzung im MVP Summit F# Meetup / SEATTLE F# USERS GROUP
Folie: Archiv IL2C erstellen
#6-54-Sitzung im Microsoft MVP Global Summit 2018 – VS HACKATHON“
Sitzungsvideo (Japanisch): „Archivierte IL2C-Playlist erstellen“
„Wie erstelle ich IL2C oder ein IL2CPP-ähnliches Tool? Sie sehen, dass nur der reine Designprozess das Konzept umfasst.“
Nr. 1 Sitzung im Center CLR Nr. 6
Videobrief (Japanisch): IL2C auf micro:bit- und Arduino-Plattform getestet
Sitzungsvideo (Japanisch): Archiv IL2C erstellen
Sitzung Nr. 6–28 auf der .NET Conf 2017 in Tokio, Raum B
Informationen zu Meilenstein 2+ (Japanisch): Umfangreiches Xamarin – Xamaritans
enthalten im Booklet „Extensive Xamarin – Techbook Fest Teil 3“
#6-6: Fast Meilensteine
#6-14: Datenflussanalyse
Meilenstein 1: Testen Sie auf VC++ und prüfen Sie, wie der Optimierer des C-Compilers funktioniert.
#6-48: Wie die Mark-and-Sweep-Garbage Collection bei einem übersetzten Code funktioniert.
Wie Überladungs-/Überschreibungs-/Virtual-Methoden-Symbolrechnung funktioniert.
So übersetzen Sie Ausnahmehandler, wenn die lokale und die globale Abwicklung kombiniert werden.
Wir im Center CLR denken darüber nach: Probieren Sie es aus! Entwicklungstreffen (10.11.2018, Japanisch)
Dies ist das Strukturdiagramm für den Exection-Frame und den Exception-Frame.