Bei Red Hat
Im aktuellen Entwicklungsstand sind Übersetzer in die Zwischendarstellung von MIR vorbereitet
Der Zwischen-MIR-Code kann in Binär- und Textform (lesbar) dargestellt werden. Dieser Code kann in einem Interpreter ausgeführt und darauf basierend Maschinencode generiert werden (x86_64, in ARM64-, PPC64- und MIPS64-Plänen). Es ist auch möglich, die umgekehrte Konvertierung durchzuführen – von MIR nach CIL, Java-Bytecode, WebAssembly und C-Code.
Zu den Merkmalen von MIR zählen die strikte Typisierung, die Unterstützung von Modulen und Funktionen, die Bereitstellung einer Reihe von Anweisungen für Typkonvertierung, Vergleich, arithmetische und logische Operationen, Verzweigung usw. Module, die eine Reihe von in das MIR-Format konvertierten Funktionen enthalten, können in Form von Bibliotheken geladen werden und können auch externen C-Code laden.
Der Hauptvorteil der Ausführung von Zwischencode in JIT statt der Kompilierung in native ausführbare Dateien besteht in der Möglichkeit, kompakte Dateien zu generieren, die ohne Neuaufbau auf verschiedenen Hardwarearchitekturen (x86, ARM, PPC, MIPS) ausgeführt werden können. Für nicht unterstützte Architekturen steht ein Interpretationsmodus zur Verfügung, der im Fall von MIR 6–10 Mal langsamer ist als JIT.
Nachteile vorhandener JIT-Compiler
GCC und LLVM sollen übermäßig aufgebläht sein, eine niedrige Kompilierungsgeschwindigkeit haben und es schwierig ist, kombinierte Optimierungen für verschiedene Programmiersprachen zu implementieren. MIR-Entwickler haben versucht, diese zu lösen
Probleme lösen und Ziele setzen:
- Die Kompilierung in MIR sollte mindestens 100-mal schneller sein als in GCC.
- Die JIT für die MIR-Ausführung muss sehr kompakt sein und etwa 15 Codezeilen umfassen;
- Die Ausführung von MIR mit JIT sollte nicht mehr als 30 % langsamer sein als die Leistung einer ausführbaren Datei, die aus demselben C-Code in GCC kompiliert wurde (mit „-O2“-Optimierungen);
- Die Initialisierungsphasen vor Beginn der eigentlichen Ausführung sollten 100-mal weniger Zeit in Anspruch nehmen;
- Die MIR-Darstellung für JIT muss 100-mal kleiner sein als die in GCC kompilierte ausführbare Datei.
In ihrer aktuellen Form ist die MIR-Implementierung den ursprünglich gesetzten Zielen in vielerlei Hinsicht voraus: Tests haben gezeigt, dass die Kompilierungsleistung in MIR 2-mal schneller ist als bei „GCC-O178“, die Ausführungsleistung liegt 6 % hinter dem nativen Code, der Codegröße 144-mal kleiner ist, beträgt die JIT der MIR-Implementierung 16 Codezeilen.
Source: opennet.ru