Ruby 3.2.0第一預覽版已經釋出,官方在這個版本添加許多功能和效能改進,而最值得注意的是,從Ruby開始加入對WebAssembly的支援,以鼓勵開發人員在WebAssembly環境使用CRuby,另外,正規表示式現在加入逾時配置,避免Regexp執行的時間超過預期。

程式語言WebAssembly原本的設計目標,是要在網頁瀏覽器中安全且快速的執行程式,後來跨出網頁瀏覽器開始能夠獨立執行,Ruby官方提到,在各種環境高效能地執行程式,不僅是網頁應用程式的需求,也是一般應用程式所需要的。

Ruby 3.2透過WASI提供對WebAssembly的支援,WASI是WebAssembly的模組化系統介面,能夠支援WebAssembly跨平臺用例。由於WebAssembly在虛擬機器中執行,沒有系統介面,無法在作業系統上運作,因此Mozilla在2019年推出了WASI,提供了一個標準化介面,使得WebAssembly能夠擴展到更多的平臺上。

Ruby加入對WebAssembly的支援,可讓CRuby二進位檔案在網頁瀏覽器、無伺服器邊緣環境,和其他WebAssembly嵌入器上運作。

官方提到,由於WASI和WebAssembly仍在發展,而且基於安全理由,本身缺少一些功能,無法實作Ruby的Fiber、異常和垃圾回收等功能,因此CRuby使用JavaScript打包器Asyncify,以二進位檔案轉換技術,在使用者空間控制執行,來彌補缺少的部分。另外,官方也在WASI之上建立了虛擬檔案系統,開發者可以將Ruby應用程式打包成單個.wasm檔案,讓Ruby應用程式發布更加簡單。

Ruby 3.2另一個新功能,則是在正規表示式加入逾時功能,由於Regexp比對可能花費意想不到的時間,而惡意攻擊者可能藉此以精心設計的輸入,來對效率低下的正規表示式,發動DoS攻擊,官方提到,透過在Ruby應用程式加入Regexp.timeout逾時設定,將可有效緩解DoS風險。不過Regexp.timeout是一個全域設定,開發者要對特殊Regexp使用不同的逾時配置,則需要進行額外的配置。

熱門新聞

Advertisement