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

-
YJIT 不再是實驗性的
-
已經(jīng)在生產(chǎn)工作負(fù)載上進(jìn)行了一年多的測試,證明非常穩(wěn)定。
-
-
YJIT 現(xiàn)在支持 Linux、MacOS、BSD 和其他 UNIX 平臺上的 x86-64 和 arm64/aarch64 CPU。
-
此版本支持 Apple M1/M2、AWS Graviton、Raspberry Pi 4 等。
-
-
構(gòu)建 YJIT 現(xiàn)在需要 Rust 1.58.0+。[Feature #18481 ]
-
為了確保 CRuby 是使用 YJIT 構(gòu)建的,請在運行
./configure
腳本之前安裝rustc
>= 1.58.0 。
-
-
YJIT 3.2 版本比 3.1 更快,內(nèi)存開銷大約是 3.1 的 1/3。
-
總體而言,YJIT 比 yjit-bench 上的 Ruby 解釋器快 41%(幾何平均值)。
-
JIT 代碼的物理內(nèi)存是延遲分配的。與 Ruby 3.1 不同,Ruby 進(jìn)程的 RSS 被最小化,因為
--yjit-exec-mem-size
分配的虛擬內(nèi)存頁在 JIT 代碼實際使用之前不會映射到物理內(nèi)存頁。 -
引入 Code GC,當(dāng) JIT 代碼的內(nèi)存消耗達(dá)到
--yjit-exec-mem-size
時,釋放所有代碼頁。 -
RubyVM::YJIT.runtime_stats
在現(xiàn)有的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
生成的大部分統(tǒng)計數(shù)據(jù)現(xiàn)在都可以在發(fā)布版本中使用。-
只需使用
--yjit-stats
運行 ruby 來計算和轉(zhuǎn)儲統(tǒng)計信息(會產(chǎn)生一些運行時開銷)。
-
-
YJIT 現(xiàn)在經(jīng)過優(yōu)化以利用 object shapes。[Feature #18776 ]
-
在定義新常量時,利用更細(xì)粒度的常量失效來減少代碼的無效化。[Feature #18589 ]
-
默認(rèn)
--yjit-exec-mem-size
更改為 64 (MiB)。 -
默認(rèn)
--yjit-call-threshold
更改為 30。
針對 ReDoS 的正則表達(dá)式改進(jìn)
由于正則表達(dá)式匹配會耗費不少時間,當(dāng)代碼試圖向不受信任的輸入匹配低效的正則表達(dá)式時,攻擊者可能會利用它進(jìn)行 DoS 攻擊(即正則表達(dá)式 DoS,或稱作 ReDoS)。因此新版本引入了兩項可顯著緩解 ReDoS 攻擊的改進(jìn)。改進(jìn)的正則表達(dá)式匹配算法從 Ruby 3.2 開始,Regexp 的匹配算法通過使用記憶技術(shù)得到了極大的改進(jìn)。# 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
根據(jù) Ruby 應(yīng)用程序的要求進(jìn)行配置,可以防止或顯著降低 DoS 的風(fēng)險。請注意,Regexp.timeout
是全局配置項,如果希望對某些特殊的正則表達(dá)式使用不同的超時設(shè)置,需要使用timeout
關(guān)鍵字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]錯誤高亮-
現(xiàn)在它指向 TypeError 和 ArgumentError 的相關(guān)參數(shù)
test.rbin `+': nil can't be coerced into Integer (TypeError)
sum = ary[0] + ary[1]
^^^^^^
語言-
匿名 rest 和關(guān)鍵字 rest 參數(shù)可以作為參數(shù)傳遞,而不僅僅是在方法參數(shù)中使用。[Feature #18351]
deffoo(*)
bar(*)
end
defbaz(**)
quux(**)
end
更多詳情可查看官方公告:https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/-
ruby
+關(guān)注
關(guān)注
0文章
44瀏覽量
3627
原文標(biāo)題:Ruby 3.2.0正式發(fā)布,新增多項改進(jìn)
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
又一款藍(lán)牙5.4芯片發(fā)布,發(fā)射性能提升新增多接口
智融科技再獲多項殊榮
光峰科技為2025款問界M9供應(yīng)智能激光投影巨幕系統(tǒng)2.0
SOLIDWORKS 2025 PDM新增功能

荷蘭4月1日起擴大半導(dǎo)體設(shè)備出口管制,新增特定測量設(shè)備等多項技術(shù)
四創(chuàng)電子榮獲2024年企業(yè)管理創(chuàng)新成果多項榮譽

SOLIDWORKS 2025設(shè)計新增功能
SOLIDWORKS 2025引入了多項新增工具和增強功能
【華秋DFM】V4.4新版發(fā)布:以用戶需求為核心,持續(xù)優(yōu)化設(shè)計與制造體驗
HyperLynx 2409新增功能和改進(jìn)功能
請問linux-3.2.0的內(nèi)核支持TLV320AIC3104音頻驅(qū)動嗎?
請問inux-3.2.0中tlv320aic3x.c驅(qū)動是否支持TLV320AIC3104這款芯片呢?
云知聲山海大模型多項能力全球領(lǐng)跑

評論