在紅帽
在目前的開發階段,MIR 中間表示的翻譯器已經準備好
中間 MIR 程式碼可以以二進位和文字(可讀)形式呈現。該程式碼可以在解釋器中執行,並且可以基於它產生機器碼(x86_64,在 ARM64、PPC64 和 MIPS64 計劃中)。也可以執行反向轉換 - 從 MIR 到 CIL、Java 字節碼、WebAssembly 和 C 程式碼。
MIR 的特性中,最突出的是嚴格類型化、對模組和函數的支援、提供了一組用於類型轉換、比較、算術和邏輯運算、分支等的指令。模組包括一組轉換為 MIR 格式的函數,可以以庫的形式加載,也可以載入外部 C 程式碼。
在JIT 中執行中間程式碼而不是編譯為本機可執行文件的主要優點是能夠產生緊湊的文件,這些文件可以在不同的硬體架構(x86、ARM、PPC、MIPS)上重建而無需重建即可執行。對於不受支援的架構,可以使用解釋模式,在 MIR 的情況下,該模式比 JIT 慢 6-10 倍。
現有 JIT 編譯器的缺點
GCC和LLVM被認為過於臃腫,編譯速度低,並且很難實現針對不同程式語言的組合最佳化。 MIR 開發人員試圖解決這些問題
問題與設定目標:
- MIR 中的編譯速度至少比 GCC 快 100 倍;
- MIR 執行的 JIT 必須非常緊湊,包含約 15 行程式碼;
- 使用 JIT 執行 MIR 的效能不應比在 GCC 中從相同 C 程式碼編譯的可執行檔的效能慢 30% 以上(使用「-O2」最佳化);
- 實際執行開始之前的初始化階段應該可以減少 100 倍的時間;
- JIT 的 MIR 表示必須比 GCC 中編譯的可執行檔小 100 倍。
就目前的形式而言,MIR 實現在許多方面都領先於最初設定的目標:測試表明,MIR 中的編譯性能比“GCC -O2”快178 倍,執行性能落後本機代碼6%,程式碼大小小了 144 倍,MIR 實作 JIT 是 16 行程式碼。
來源: opennet.ru