程式語言Ruby開發團隊按慣例在每年聖誕節發布更新,推出Ruby 4.0.0,這個主要版本把重點放在兩項新功能,包含實驗性的Ruby Box隔離機制,以及新一代即時編譯器ZJIT。除此之外,Ruby也持續推進Ractor的平行執行機制,並同步調整部分語言行為與標準函式庫配置。

Ruby 4.0新增的Ruby Box其核心概念是隔離,官方描述該功能可用來分離各種定義的影響範圍,包含猴子修補程式(Monkey Patch)、全域變數與類別變數的變更、類別與模組定義,以及載入的原生或Ruby函式庫。Ruby Box目前屬於實驗功能,其像是提供一個基礎層API,讓開發者把原本容易互相汙染的修改關在各自的範圍內,以降低副作用擴散。

官方也點出Ruby Box的預期用途,最直覺的是測試隔離。當測試為了模擬情境而大量調整行為時,隔離機制可以降低影響其他測試的機率。另一個被提及的方向是,同一個程序內並行跑多個網頁應用程式實例,用於藍綠部署,或在更新相依套件期間,先讓新舊版本並行一段時間,再以Ruby程式比對回應差異,協助團隊評估改版風險。官方同時提到,Ruby Box也可能成為未來更高層封裝機制的基礎,但目前尚未定案。

Ruby 4.0引入ZJIT即時編譯器。ZJIT是下一代新編譯器,目標一方面提高效能上限,包含更大的編譯單元與SSA形式的中介表示,另一方面也希望以較傳統的方法式編譯器設計,吸引更多外部貢獻。

不過,Ruby團隊對ZJIT的成熟度相對保守,官方指出,雖然ZJIT目前比直譯器更快,但仍不及YJIT,目前不建議直接用於正式環境,並預告Ruby 4.1會持續改進ZJIT。

官方也持續強化Ractor機制,Ruby 4.0進一步加入新類別Ractor::Port,針對Ractor之間的訊息傳送與接收提供新的同步通訊介面,同時也提供更容易在Ractor間共享Proc物件的方式,例如Ractor.shareable_proc。效能面上,Ruby調整多個內部資料結構,以降低全域鎖(Global Lock)相關的鎖競爭,並減少Ractor並行執行時的CPU快取競爭,藉此提升平行度與整體執行效率。

Ractor自Ruby 3.0以實驗功能登場,Ractor的設計目標,是在同一個Ruby程序內讓多段Ruby程式更有機會利用多核心進行平行運算。官方也表示希望在2026年移除其實驗性標記,顯示並行路線仍在持續推進。

熱門新聞

Advertisement