网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

出品 | OSC开源社区(ID:oschina2013)

Ruby 3.2.0 现已发布,该版本添加了许多功能和性能改进。具体更新内容如下:

基于 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_sizeoutlined_code_sizekeys 之外,还返回 Code GC metrics:code_gc_countlive_page_countfreed_page_countfreed_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.rb:2:in `+': 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/

开源白嫖不提倡?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
乌专家:中国“榨干”苏联遗产,我们图纸都没看懂,他们造出2.0

乌专家:中国“榨干”苏联遗产,我们图纸都没看懂,他们造出2.0

混沌录
2025-12-27 21:33:28
情况已经开始不对劲儿了,马杜罗成烫手山芋,把人交给俄罗斯?

情况已经开始不对劲儿了,马杜罗成烫手山芋,把人交给俄罗斯?

小陆搞笑日常
2026-01-07 08:15:51
胡忠雄在广州与广东省委常委、省委组织部部长、广州市委书记冯忠华举行会见

胡忠雄在广州与广东省委常委、省委组织部部长、广州市委书记冯忠华举行会见

知知贵阳
2026-01-08 00:47:09
刘德华、郭富城告诉你:西服不成套穿,裤子短一截,到老也不油腻

刘德华、郭富城告诉你:西服不成套穿,裤子短一截,到老也不油腻

飘逸语人
2025-12-25 22:16:54
北京首钢VS山东男篮!许利民拒绝输球,贝利CBA首秀,央视直播

北京首钢VS山东男篮!许利民拒绝输球,贝利CBA首秀,央视直播

体坛瞎白话
2026-01-08 08:13:38
美方积极讨论“购买”格陵兰岛 鲁比奥下周或与丹麦官员会面

美方积极讨论“购买”格陵兰岛 鲁比奥下周或与丹麦官员会面

环球网资讯
2026-01-08 07:11:05
伊能静迪拜看房,真人又矮又胖,臀部好宽大,与精修图反差明显

伊能静迪拜看房,真人又矮又胖,臀部好宽大,与精修图反差明显

小椰的奶奶
2026-01-07 01:10:08
起底北京国安新帅,与李铁是好队友,在亚冠赛场曾被张稀哲干翻过

起底北京国安新帅,与李铁是好队友,在亚冠赛场曾被张稀哲干翻过

姜大叔侃球
2026-01-08 12:36:09
你见过的最沉得住气的人是怎样?网‬友:五分钟连超10万人的奇迹

你见过的最沉得住气的人是怎样?网‬友:五分钟连超10万人的奇迹

夜深爱杂谈
2026-01-04 23:05:06
美女白色露脐T恤配蓝色瑜伽裤,性感值拉满,简直是行走的 荷尔蒙

美女白色露脐T恤配蓝色瑜伽裤,性感值拉满,简直是行走的 荷尔蒙

小乔古装汉服
2025-09-24 07:20:03
饲料大王刘永好坦言:我们吃的猪肉90%是“三元猪”,所以不香了

饲料大王刘永好坦言:我们吃的猪肉90%是“三元猪”,所以不香了

丁丁鲤史纪
2025-12-23 16:14:18
皇帝让自己姑姑侍寝,姑姑开始反对后来顺从,还怂恿他杀自己丈夫

皇帝让自己姑姑侍寝,姑姑开始反对后来顺从,还怂恿他杀自己丈夫

铭记历史呀
2025-12-17 18:02:13
天然气对华毁约,加入欧美稀土战略,哈萨克斯坦这路谁教他走的?

天然气对华毁约,加入欧美稀土战略,哈萨克斯坦这路谁教他走的?

策略述
2025-12-27 17:20:34
为什么《当幸福来敲门》是恐怖片

为什么《当幸福来敲门》是恐怖片

北戴河桃罐头厂电影修士会
2026-01-06 14:05:17
比恒大还惨!中国第二大民企倒了,负债7500亿,创始人被带走

比恒大还惨!中国第二大民企倒了,负债7500亿,创始人被带走

芳芳历史烩
2025-12-25 20:32:52
不阻止、不谴责,联合国还有必要存在吗?秘书长回答令人错愕

不阻止、不谴责,联合国还有必要存在吗?秘书长回答令人错愕

策略述
2026-01-07 12:40:12
TVB红毯:佘诗曼风韵犹存,黄宗泽真老了,高海宁、陈自瑤太敢穿

TVB红毯:佘诗曼风韵犹存,黄宗泽真老了,高海宁、陈自瑤太敢穿

糊咖娱乐
2026-01-05 11:39:41
我那兄弟娶了个洋媳妇,天天哀嚎:搂着俄罗斯老婆睡,堪比抱刺猬

我那兄弟娶了个洋媳妇,天天哀嚎:搂着俄罗斯老婆睡,堪比抱刺猬

前沿天地
2025-12-29 11:22:33
孙俪在上海襄阳北路拍戏,封路拍摄,引起路人不满

孙俪在上海襄阳北路拍戏,封路拍摄,引起路人不满

凌风的世界观
2026-01-06 15:40:17
家有哪3生肖,1月9号起财运如潮涌,贵人不断,富贵稳稳来

家有哪3生肖,1月9号起财运如潮涌,贵人不断,富贵稳稳来

毅谈生肖
2026-01-08 11:36:47
2026-01-08 13:55:00
开源中国 incentive-icons
开源中国
每天为开发者推送最新技术资讯
7539文章数 34495关注度
往期回顾 全部

科技要闻

雷军:现在听到营销这两个字都有点恶心

头条要闻

委内瑞拉外长:感谢中方支持

头条要闻

委内瑞拉外长:感谢中方支持

体育要闻

约基奇倒下后,一位故人邪魅一笑

娱乐要闻

2026春节档将有六部电影强势上映

财经要闻

微软CTO韦青:未来人类会花钱"戒手机"

汽车要闻

不谈颠覆与奇迹,智驾企业还能聊点什么?

态度原创

本地
教育
健康
家居
游戏

本地新闻

“闽东利剑·惠民安商”高效执行专项行动

教育要闻

孩子的科技教育怎么跟上时代?

这些新疗法,让化疗不再那么痛苦

家居要闻

理性主义 冷调自由居所

《生化4》碍事梨性感雕像:硅胶皮肤 丝滑头发

无障碍浏览 进入关怀版