紅帽開發 MIR JIT 編譯器

在紅帽 開發正在進行中 新的輕量級 JIT 編譯器 MIR,這確保了先前已轉換為中間表示形式 MIR(中型內部表示形式,不要與其他中間表示形式混淆)的代碼的執行 MIR (中級 IR),用於 Rust 編譯器)。該專案旨在提供一個用於實現快速、緊湊的解釋器和 JIT 的框架。專案程式碼是用C語言寫的 分發者 在麻省理工學院的許可下。

在目前的開發階段,MIR 中間表示的翻譯器已經準備好 C語言 和位碼 LLVM (Bitcode),但未來計畫實現為WebAssembly、Java字節碼產生MIR的能力, 化學工業協會 (通用中間語言)、Rust 和 C++。此專案由 JIT 引擎開發人員之一開發 麻省理工學院,用在 Ruby 中。首先,計劃實施基於MIR的JIT 紅寶石 и 魯比。將來也可以將GCC移植到使用MIR。

紅帽開發 MIR JIT 編譯器

中間 MIR 程式碼可以以二進位和文字(可讀)形式呈現。該程式碼可以在解釋器中執行,並且可以基於它產生機器碼(x86_64,在 ARM64、PPC64 和 MIPS64 計劃中)。也可以執行反向轉換 - 從 MIR 到 CIL、Java 字節碼、WebAssembly 和 C 程式碼。

MIR 的特性中,最突出的是嚴格類型化、對模組和函數的支援、提供了一組用於類型轉換、比較、算術和邏輯運算、分支等的指令。模組包括一組轉換為 MIR 格式的函數,可以以庫的形式加載,也可以載入外部 C 程式碼。

紅帽開發 MIR JIT 編譯器紅帽開發 MIR JIT 編譯器

在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 行程式碼。

紅帽開發 MIR JIT 編譯器

來源: opennet.ru

添加評論