紅帽的軟體開發工程師Vladimir Makarov在開發者部落格提到,他現在正開發一個輕量級JIT編譯器(MIR,Medium Internal Representation),編譯速度與啟動速度將比GCC或LLVM快100倍,作為現有MJIT編譯器的補充,或是在現有JIT編譯器無法作用時,成為替代方案。

Vladimir Makarov提到,過去社群花費了大量的時間,對GCC和LLVM進行最佳化,除了改善可靠度,同時也建立了許多工作基礎,因此其他人可以使用這些成果,快速地以GCC或LLVM介面來實作JIT,他們也以這些現有的編譯器,開發了CRuby JIT。

不過,這其中存在了許多缺點,其中一大缺點,便是以GCC或LLVM作為基礎的JIT程式通常很大,CRuby 2.6本身超過150萬行程式碼,而龐大的程式碼量對於雲端、物聯網和行動裝置上的應用,目前仍是很大的問題。

而且GCC和LLVM的編譯速度也很慢,雖然在英特爾的高階CPU只要花費20毫秒,但對於物聯網裝置使用的較低階CPU,可能需要花上半秒鐘,另外,現有GCC和LLVM JIT,難以使用不同程式語言開發的程式碼,實作組合最佳化,Vladimir Makarov提到,內聯函式是一個提高JIT效能最重要的最佳化,因為方法的呼叫成本很高,而且內聯也允許更大範圍的最佳化,但是現在要將用C編寫的方法,內聯到以Ruby撰寫的方法中仍是一個問題。

輕量級JIT可以解決這些問題,Vladimir Makarov認為,輕量級編譯器應該是MRuby JIT更好的解決方案,也有助於將Ruby的使用範圍,從伺服器市場擴展到行動裝置和物聯網市場。這個輕量級JIT稱為MIR,概念上是一種明確定義的中介語言。

MIR要成為比GCC或LLVM所提供的JIT介面,還要輕量的JIT編譯器,Vladimir Makarov的目標是,編譯速度和啟動速度要比經最佳化的GCC還要快100倍,程式碼也要小100倍,因此實作程式碼要少於1萬行C程式碼。MIR的初期目標是先滿足CRuby或MRuby的JIT需求。

MIR具有強類型的特性,使用者可以透過LLVM IR作為使用MIR的途徑,未來Vladimir Makarov希望除了LLVM IR,WebAssembly、Java位元組碼、CIL甚至是其他中介語言與中介碼,都可以作為MIR的輸入,最終是要讓MIR可以使用所有流行的機器碼,並也能回傳C、WebAssembly、Java位元組碼,Vladimir Makarov提到,MIR目標與LLVM IR目標相似,但是輸入與輸出有許多差異。

MIR是一個龐大的專案,Vladimir Makarov決定以開源的方式進行,有興趣的開發者已經可以在GitHub上追蹤專案進度,或是加入開發的行列,MIR仍在初期階段,但很快的就會先用在CRuby和MRuby的JIT實作上。


Advertisement

更多 iThome相關內容