基于 WASI 的 WebAssembly 支持
這是基于 WASI 的 WebAssembly 支持的初始移植。此項特性使得 CRuby 二進制文件可在 Web 瀏覽器、Serverless Edge 環境和其他 WebAssembly/WASI 嵌入器上使用。目前,此移植可在不使用 Thread API 的前提下通過基本和引導測試套件的測試。
生產就緒的 YJIT

-
YJIT 不再是實驗性的
-
已經在生產工作負載上進行了一年多的測試,證明非常穩定。
-
-
YJIT 現在支持 Linux、MacOS、BSD 和其他 UNIX 平臺上的 x86-64 和 arm64/aarch64 CPU。
-
此版本支持 Apple M1/M2、AWS Graviton、Raspberry Pi 4 等。
-
-
構建 YJIT 現在需要 Rust 1.58.0+。[Feature #18481 ]
-
為了確保 CRuby 是使用 YJIT 構建的,請在運行
./configure腳本之前安裝rustc>= 1.58.0 。
-
-
YJIT 3.2 版本比 3.1 更快,內存開銷大約是 3.1 的 1/3。
-
總體而言,YJIT 比 yjit-bench 上的 Ruby 解釋器快 41%(幾何平均值)。
-
JIT 代碼的物理內存是延遲分配的。與 Ruby 3.1 不同,Ruby 進程的 RSS 被最小化,因為
--yjit-exec-mem-size分配的虛擬內存頁在 JIT 代碼實際使用之前不會映射到物理內存頁。 -
引入 Code GC,當 JIT 代碼的內存消耗達到
--yjit-exec-mem-size時,釋放所有代碼頁。 -
RubyVM::YJIT.runtime_stats在現有的inline_code_size和outlined_code_sizekeys 之外,還返回 Code GC metrics:code_gc_count、live_page_count、freed_page_count和freed_code_size。
-
-
由
RubyVM::YJIT.runtime_stats生成的大部分統計數據現在都可以在發布版本中使用。-
只需使用
--yjit-stats運行 ruby 來計算和轉儲統計信息(會產生一些運行時開銷)。
-
-
YJIT 現在經過優化以利用 object shapes。[Feature #18776 ]
-
在定義新常量時,利用更細粒度的常量失效來減少代碼的無效化。[Feature #18589 ]
-
默認
--yjit-exec-mem-size更改為 64 (MiB)。 -
默認
--yjit-call-threshold更改為 30。
針對 ReDoS 的正則表達式改進
由于正則表達式匹配會耗費不少時間,當代碼試圖向不受信任的輸入匹配低效的正則表達式時,攻擊者可能會利用它進行 DoS 攻擊(即正則表達式 DoS,或稱作 ReDoS)。因此新版本引入了兩項可顯著緩解 ReDoS 攻擊的改進。改進的正則表達式匹配算法從 Ruby 3.2 開始,Regexp 的匹配算法通過使用記憶技術得到了極大的改進。
# This match takes 10 sec. in Ruby 3.1, and 0.003 sec. in Ruby 3.2 /^a*b?a*$/ =~ "a" * 50000 + "x"

改進后的匹配算法使得大多數 Regexp 匹配(實驗中大約為 90%)在線性時間內完成。對于 3.2.0 預覽版本的用戶:此優化可能會消耗與每個匹配的輸入長度成比例的內存。預計不會出現實際問題,因為此內存分配通常會延遲,并且正常的 Regexp 匹配最多應消耗 10 倍的內存輸入長度。正則表達式超時退出機制此版本引入了正則表達式超時退出機制。
Regexp.timeout = 1.0
/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in one second
Regexp.timeout根據 Ruby 應用程序的要求進行配置,可以防止或顯著降低 DoS 的風險。請注意,Regexp.timeout是全局配置項,如果希望對某些特殊的正則表達式使用不同的超時設置,需要使用timeout關鍵字Regexp.new。
Regexp.timeout = 1.0
# This regexp has no timeout
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)
long_time_re =~ "a" * 50000 + "x" # never interrupted
此項特性的最初提案:https://bugs.ruby-lang.org/issues/17837其他值得注意的新功能
語法建議-
syntax_suggest(以前的dead_end)的功能已集成到 Ruby 中,可以幫助找到錯誤的位置,例如丟失或多余的 end 。
Unmatched `end', missing keyword (`do', `def`, `if`, etc.) ?
1 class Dog
> 2 defbark
> 4 end
5 end
[Feature #18159]錯誤高亮-
現在它指向 TypeError 和 ArgumentError 的相關參數
test.rbin `+': nil can't be coerced into Integer (TypeError)
sum = ary[0] + ary[1]
^^^^^^
語言-
匿名 rest 和關鍵字 rest 參數可以作為參數傳遞,而不僅僅是在方法參數中使用。[Feature #18351]
deffoo(*)
bar(*)
end
defbaz(**)
quux(**)
end
更多詳情可查看官方公告:https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/-
ruby
+關注
關注
0文章
44瀏覽量
3875
原文標題:Ruby 3.2.0正式發布,新增多項改進
文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
西門子PCB DFM分析工具Valor NPI 2510版本的新增功能
淺談藍牙核心規范6.2的四項關鍵增強功能
移遠GNSS產品再進化:新增自研RTKHOLD技術,集成伽利略OSNMA與HAS服務
Matter 1.5 正式發布
連接標準聯盟正式推出Matter 1.5版本
Imagination GPU 驅動更新:新增多項 Vulkan 與 OpenCL 擴展支持
開鴻Bot系列大版本更新:體驗穩定升級,樂享高效協同!
NVIDIA RAPIDS 25.06版本新增多項功能
了解SOLIDWORKS202仿真方面的改進
匠芯創發布新版GUI開發工具 新增多國語言設置等功能
商湯大裝置重磅發布多項標志性成果
亞馬遜云科技在2025紐約峰會發布多項AI agent創新
Ruby 3.2.0正式發布 新增多項改進
評論