基于 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_size
keys 之外,還返回 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.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瀏覽量
3634
原文標題:Ruby 3.2.0正式發布,新增多項改進
文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
又一款藍牙5.4芯片發布,發射性能提升新增多接口
光峰科技為2025款問界M9供應智能激光投影巨幕系統2.0
SOLIDWORKS 2025 PDM新增功能

荷蘭4月1日起擴大半導體設備出口管制,新增特定測量設備等多項技術
SOLIDWORKS 2025設計新增功能
SOLIDWORKS 2025引入了多項新增工具和增強功能
【華秋DFM】V4.4新版發布:以用戶需求為核心,持續優化設計與制造體驗
HyperLynx 2409新增功能和改進功能
請問inux-3.2.0中tlv320aic3x.c驅動是否支持TLV320AIC3104這款芯片呢?
云知聲山海大模型多項能力全球領跑

評論