Bij Rode Hoed
In de huidige ontwikkelingsfase zijn vertalers naar de tussenweergave van MIR voorbereid
De tussenliggende MIR-code kan in binaire vorm en in tekstvorm (leesbaar) worden weergegeven. Deze code kan worden uitgevoerd in een tolk en op basis daarvan kan machinecode worden gegenereerd (x86_64, in ARM64-, PPC64- en MIPS64-plannen). Het is ook mogelijk om de omgekeerde conversie uit te voeren - van MIR naar CIL, Java bytecode, WebAssembly en C-code.
Onder de kenmerken van MIR vallen strikt typen, ondersteuning voor modules en functies, het verstrekken van een reeks instructies voor typeconversie, vergelijking, rekenkundige en logische bewerkingen, vertakkingen, enz. op. Modules, die een reeks functies bevatten die zijn geconverteerd naar het MIR-formaat, kunnen worden geladen in de vorm van bibliotheken en kunnen ook externe C-code laden.
Het belangrijkste voordeel van het uitvoeren van tussenliggende code in JIT in plaats van het compileren in native uitvoerbare bestanden is de mogelijkheid om compacte bestanden te genereren die kunnen worden uitgevoerd zonder opnieuw op te bouwen op verschillende hardware-architecturen (x86, ARM, PPC, MIPS). Voor niet-ondersteunde architecturen is een interpretatiemodus beschikbaar, die in het geval van MIR 6-10 keer langzamer is dan JIT.
Nadelen van bestaande JIT-compilers
Er wordt gezegd dat GCC en LLVM overdreven opgeblazen zijn, een lage compilatiesnelheid hebben en dat het moeilijk is om gecombineerde optimalisaties voor verschillende programmeertalen te implementeren. MIR-ontwikkelaars probeerden deze op te lossen
problemen en doelen stellen:
- Compilatie in MIR moet minstens 100 keer sneller zijn dan in GCC;
- De JIT voor MIR-uitvoering moet zeer compact zijn en ongeveer 15 regels code bevatten;
- Het uitvoeren van MIR met behulp van JIT mag niet meer dan 30% langzamer zijn dan de prestaties van een uitvoerbaar bestand dat is samengesteld uit dezelfde C-code in GCC (met "-O2"-optimalisaties);
- De initialisatiefasen voordat de daadwerkelijke uitvoering begint, zouden 100 keer minder tijd moeten vergen;
- De MIR-representatie voor JIT moet 100 keer kleiner zijn dan het uitvoerbare bestand dat in GCC is gecompileerd.
In zijn huidige vorm loopt de MIR-implementatie in veel opzichten voor op de aanvankelijk gestelde doelen: tests hebben aangetoond dat de compilatieprestaties in MIR 2 keer sneller zijn dan “GCC -O178”, de uitvoeringsprestaties liggen 6% achter op de native code, de codegrootte is 144 keer kleiner, de MIR-implementatie JIT is 16 regels code.
Bron: opennet.ru