我们很高兴地宣布Ruby 3.3.0-preview1的发布。 Ruby 3.3增加了一个新的名为RJIT的纯Ruby JIT编译器,使用Lrama作为分析器生成器,并特别对YJIT进行了许多性能改进。
RJIT
引入了一个纯Ruby JIT编译器RJIT并取代了MJIT。
RJIT只支持Unix平台上的x86_64架构。
与MJIT不同,它在运行时不需要C编译器。
RJIT的存在只是为了试验性的目的。
你应该在生产中继续使用 YJIT。
如果你对为Ruby开发JIT感兴趣,请查看k0kubun在RubyKaigi第三天的演讲。
使用Lrama而不是Bison
用Lrama LALR分析器生成器代替Bison Feature #19637
如果你有兴趣,请看Ruby解析器的未来愿景
YJIT
比3.2有了明显的性能改进
对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
多个错误修复
其他值得注意的新功能
语言
性能改进
define?(@ivar)在使用对象形状时进行了优化。
自3.2以来其他值得注意的变化
兼容性问题
注意:不包括功能错误的修复。
移除的常量
以下废弃的常量已被删除。
移除的方法
删除了以下废弃的方法。
Stdlib兼容性问题
ext/readline已经退役
我们有reline,它是与ext/readline API兼容的纯Ruby实现。我们在未来依靠reline。如果你需要使用ext/readline,你可以通过rubygems.org用gem install readline-ext来安装ext/readline。
我们不再需要安装 libreadline 或 libedit 等库。
C语言API更新
更新的 C 语言 API
以下 API 已被更新。
移除的 C 语言 API
删除了以下废弃的API。
标准库更新
更新了以下默认宝石。
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
心理学 5.1.0
绛红 0.3.3
stringio 3.0.7
strscan 3.0.7
语法建议 1.0.4
时间 0.2.2
超时 0.3.2
uri 0.12.1
以下捆绑的gems 已经更新。
minitest 5.18.0
rbs 3.1.0
typeprof 0.21.7
debug 1.8.0
有关默认宝石或捆绑宝石的细节,请参见GitHub发布的Logger或changelog。
更多细节请参见NEWS或提交日志。
加上这些变化,自Ruby 3.2.0以来,有1922个文件被改变,75283个插入(+),44896个删除(-)!
Download
- https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.tar.gz
SIZE: 20428213 SHA1: 5445eec1cd9ddb44e03e74568cac94209c91b42d SHA256: c3454a911779b8d747ab0ea87041030d002d533edacb2485fe558b7084da25ed SHA512: 0f891f140ddc6372aa7c4459f8784126e0c341db7b80e72c51e441c5153c43c2d7b965f7807c076862ac84b9b8b0c6a66bbf66fc341746016151397bb21c782a
- https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.tar.xz
SIZE: 15074600 SHA1: 4c22ebca287c87811e1050bf4d59b7d32255b212 SHA256: ae300b49e06c13087dd163b97eddd38db895dc8e0c9904284119795d75303fbb SHA512: 46c1134dba5810847f7f6b4298900a91f5225679d7873548b271f4ef2ad1dc168722562a2e468a2ccf136314176ee613d8c7792fd4411a3f7a44c80b93b417ee
- https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.zip
SIZE: 24846962 SHA1: 31774fa653c54107b6afc30adda3a0350d8f41d2 SHA256: 6ecafecf83f2cacf446b2326012f2b6ee1a0614d8dd29bb1fb3f105c27e2c553 SHA512: 794bef847fefbbdbbdced85975a00c9289ef6464810408af3f0f2055052d6b5ef5576dbd41e0d87bb73f1ad276d8e27c36018610f8e2b9936828c0e692f611f0
转自 https://www.ruby-lang.org/en/news/2023/05/12/ruby-3-3-0-preview1-released/