Ruby 3.3.0-preview1 已发布,作为 3.3 的第一个预览版。Ruby 3.3 最重大的改动是添加了一个名为 RJIT 的新纯 Ruby JIT 编译器,使用 Lrama 作为解析器生成器,并带来许多性能改进。
RJIT
Ruby 3.3.0-preview1 引入纯 Ruby JIT 编译器 RJIT 替换了 MJIT。与 MJIT 不同,RJIT在运行时不需要 C 编译器。
有关 RJIT 的详细介绍,可查看此前的报道:《Ruby 引入新 JIT 编译器 RJIT,替代 MJIT》。
但要注意:RJIT 仅支持 Unix 平台上的 x86_64 架构。而且目前 RJIT 仅用于实验目的。应该在生产中继续使用 YJIT。
使用 Lrama 而不是 Bison
- 用 Lrama LALR 解析器生成器功能替换 Bison #19637
YJIT
性能改进
- 改进了 Splat 和 rest 参数支持。
- 为虚拟机的堆栈操作分配寄存器。
- 编译更多带有可选参数的调用。
Integer#!=
,String#!=
,Kernel#block_given?
,Kernel#is_a?
,Kernel#instance_of?
,Module#===
特别优化。
编译代码的元数据使用更少的内存
改进了 ARM64 上的代码生成
可选择以暂停模式启动 YJIT,然后手动启用它:--yjit-pause
和 RubyVM::YJIT.resume
。注意:只有在应用程序完成启动后,才可以使用它来启用 YJIT 。
退出跟踪选项现在支持采样:--trace-exits-sample-rate=N
多个错误修复
标准库更新:
- RubyGems 3.5.0.dev
- bigdecimal 3.1.4
- bundler 2.5.0.dev
- csv 3.2.7
- fiddle 1.1.2
- fileutils 1.7.1
- irb 1.6.4
- optparse 0.4.0.pre.1
- psych 5.1.0
- reline 0.3.3
- stringio 3.0.7
- strscan 3.0.7
- syntax_suggest 1.0.4
- time 0.2.2
- timeout 0.3.2
- uri 0.12.1
详情查看更新公告:https://www.ruby-lang.org/en/news/2023/05/12/ruby-3-3-0-preview1-released/