Ruby開發團隊今年也按聖誕節當天發表更新的慣例釋出Ruby 3.3.0,該版本增加了一個名為Prism的新解析器,並且使用Lrama解析器生成器替換Bison,在編譯器更新上改進YJIT的效能,也加入開發團隊最近正在實驗的純Ruby JIT編譯器RJIT。

Prism解析器是一個專為Ruby程式語言設計的遞迴下降解析器(Recursive Descent Parser),具有可移植、容錯和可維護等特性,作為Ripper的替代工具,提供更加現代且靈活的解析解決方案,已經可在生產環境中使用。

遞迴下降解析器是一種程式語言解析演算法,能夠基於文法規則將程式碼轉換成特定形式的結構,像是抽象語法樹(AST)等。Prism既是CRuby內部使用的C函式庫,也可供任何需要解析Ruby程式碼工具使用的Ruby套件(Gem),而現在Prism解析器為Ruby 3.3.0的預設套件(Gem),方便開發者在Ruby環境中執行程式碼解析。

而Ruby 3.3.0中用來代替傳統Bison的Lrama解析器生成器,主要用於Ruby程式語言的解析。Bison一直以來都是解析器生成的非常受歡迎工具,但Bison的文法限制和錯誤恢復的能力有限,再加上使用的複雜性,在部分情況下可能成為開發障礙,相較之下,Lrama是一種更為靈活的解析生成工具,特別適用於Ruby程式語言。

Lrama主要優勢在於可維護性和可擴展性,像是支援參數化規則,在Ruby的parse.y中就非常有用。支援參數化規則使得解析器可以更容易地處理複雜語言結構,提高解析器的靈活性和適應性。此外,Lrama內部的解析器被替換成為由Racc生成的LR解析器,進一步提升可維護性。這些改進都是在替Ruby的未來發展鋪路,有助於使Ruby語言解析過程更加高效精確。

Ruby 3.1初次加入的程序內編譯器YJIT,在Ruby 3.2成為正式功能,而後開發團隊繼續改進,在Ruby 3.3.0中YJIT的效能獲得提升。YJIT在記憶體使用上,相較於Ruby 3.2有明顯的改進,編譯程式碼的後設資料使用更少的記憶體,並且添加新的閾值配置來提升效能。

針對Arm64架構,YJIT生成更加緊湊的程式碼,另外,程式碼垃圾回收現在預設停用,開發者需要手動啟用。YJIT在執行時的啟動功能也獲得強化,開發者可以在執行時啟用YJIT,因此像是Ruby on Rails 7.2也可以在預設情況下啟用YJIT。YJIT預設提供更多統計資料,增加新的效能分析功能,例如—yjit-perf和—yjit-trace-exits。官方也提到,這個版本的YJIT經過更全面的測試,已修復多個錯誤,進一步提升了穩定性和可靠性。

Ruby 3.3.0還加入了全新純Ruby語言實作的即時編譯器RJIT來取代MJIT,RJIT與MJIT不同,在執行時不需要C編譯器,這個重要特性可以降低使用JIT的複雜性,並提高在不同環境中的可用性。RJIT目前仍是一個實驗性質的專案,僅支援Unix平臺上的x86-64架構,官方建議在生產環境還是先使用更成熟,且支援多種架構與平臺的YJIT。

熱門新聞

Advertisement