基于 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浏览量
3827
原文标题:Ruby 3.2.0正式发布,新增多项改进
文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
Matter 1.5 正式发布
连接标准联盟正式推出Matter 1.5版本
Imagination GPU 驱动更新:新增多项 Vulkan 与 OpenCL 扩展支持
开鸿Bot系列大版本更新:体验稳定升级,乐享高效协同!
NVIDIA RAPIDS 25.06版本新增多项功能
了解SOLIDWORKS202仿真方面的改进
匠芯创发布新版GUI开发工具 新增多国语言设置等功能
商汤大装置重磅发布多项标志性成果
亚马逊云科技在2025纽约峰会发布多项AI agent创新
匠芯创发布新版GUI开发工具 新增多国语言设置等功能
u-blox发布首款车规级Wi-Fi 7模块RUBY-W2
光峰科技为2025款问界M9供应智能激光投影巨幕系统2.0
SOLIDWORKS 2025 PDM新增功能

Ruby 3.2.0正式发布 新增多项改进
评论