去年 12 月,Ruby JIT 團隊的成員,希望將 YJIT 程式碼庫從 C99 移植到 Rust。雖然有不少開發者對此持保留意見,但這個專案最終得到了 Ruby 核心開發者以及創始人 Matz 的批准。
昨日,負責此專案的開發者已完成了使用 Rust 實現的 Ruby YJIT 編譯器,可有效取代現有的 C 版本,目前正在等待上游合併。
據介紹,Rust 版本的 YJIT 編譯器與 C 版本具有相同的水平,因為它通過了所有的 CRuby 測試,也能夠執行所有 YJIT 基準測試,並且效能與 C 版本基本一致(它以相同的方式執行,並且基本生成了相同的機器程式碼)。此外,開發團隊還加入了一些設計改進,例如更細粒度的常數失效機制,預計這將在 Ruby on Rails 應用程式中發揮巨大作用。
預設情況下,YJIT 不會被編譯,也不需要 cargo/rustc。如果 YJIT 在 dev 模式下構建,則cargo
用於獲取開發依賴項,但在 release 中構建時,cargo
不是必需的,只需要有rustc
。目前 YJIT 要求使用 Rust 1.60.0 或更新的版本。
按照計劃,Rust YJIT 將被編譯幷包含在 Ruby 3.2 版本的系統包和編譯二進位制檔案中。開發團隊稱,預計不會出現任何重大問題,因為 Rust 在 YJIT 支援的每個平臺上都得到了很好的支援。