Posted by naruse on 12 May 2023
Ruby 3.3.0-preview1 が公開されました。Ruby 3.3ではRJITという新たなJITの仕組みを追加するとともに、YJITの高速化など様々な改善が行われています。
RJIT
- Introduced a pure-Ruby JIT compiler RJIT and replaced MJIT.
- RJIT supports only x86_64 architecture on Unix platforms.
- Unlike MJIT, it doesn’t require a C compiler at runtime.
- RJIT exists only for experimental purposes.
- You should keep using YJIT in production.
- If you are interested in developing JIT for Ruby, please check out k0kubun’s presentation on Day 3 of RubyKaigi.
Use Lrama instead of Bison
- Replace Bison with Lrama LALR parser generator [Feature #19637]
- If you have interest, please see The future vision of Ruby Parser
- See also: Ruby Parser開発日誌 (5) - Lrama LALR (1) parser generatorを実装した
YJIT
- Significant performance improvements over 3.2
- Splat and rest arguments support has been improved.
- Registers are allocated for stack operations of the virtual machine.
- More calls with optional arguments are compiled.
Integer#!=
,String#!=
,Kernel#block_given?
,Kernel#is_a?
,Kernel#instance_of?
,Module#===
are specially optimized.- Instance variables no longer exit to the interpreter with megamorphic Object Shapes.
- Metadata for compiled code uses a lot less memory.
- Improved code generation on ARM64
- Option to start YJIT in paused mode and then later enable it manually
--yjit-pause
andRubyVM::YJIT.resume
- This can be used to enable YJIT only once your application is done booting
- Exit tracing option now supports sampling
--trace-exits-sample-rate=N
- Multiple bug fixes
*
その他の主要な新機能
言語機能
パフォーマンスの改善
その他の注目すべき 3.2 からの変更点
互換性に関する変更
定数の削除
以下の非推奨定数は削除されました
メソッドの削除
以下の非推奨のメソッドは削除されました
標準添付ライブラリの互換性に関する変更
ext/readline
の削除
- 今後は Ruby で書かれた GNU Readline の互換ライブラリである
reline
をすべての環境で標準で利用し、ext/readline
は削除されました。以前のext/readline
が必要なユーザーはgem install readline-ext
でインストールすることができます。 - この変更により、Ruby のインストール時に
libreadline
やlibedit
などのライブラリのインストールは不要となります。
C API の変更
C API の更新
以下の API が更新されました
C API の削除
以下の非推奨の API は削除されました
標準添付ライブラリのアップデート
-
以下の default gems のバージョンがアップデートされました。
- 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
-
以下の bundled gems のバージョンがアップデートされました。
- minitest 5.18.0
- rbs 3.1.0
- typeprof 0.21.7
- debug 1.8.0
default gems と bundled gems の詳細については Logger の GitHub Releases のような GitHub releases または changelog ファイルを参照してください。
その他詳細については、NEWS ファイルまたはコミットログを参照してください。
なお、こうした変更により、Ruby 3.2.0 以降では 1922 個のファイルに変更が加えられ、75283 行の追加と 44896 行の削除が行われました !
メリークリスマス、Ruby 3.3 とともによいお年をお迎えください!
ダウンロード
-
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
Ruby とは
Rubyはまつもとゆきひろ (Matz) によって1993年に開発が始められ、今もオープンソースソフトウェアとして開発が続けられています。Rubyは様々なプラットフォームで動き、世界中で、特にWebアプリケーション開発のために使われています。