Ruby 3.3.0-preview2 が公開されました。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](https://rubykaigi.org/2023/presentations/k0kubun.html#day3).

## Use Lrama instead of Bison

* Replace Bison with [Lrama LALR parser generator](https://github.com/yui-knk/lrama) [Feature #19637]
  * If you have interest, please see [The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html)
  * See also: [Ruby Parser開発日誌 (5) - Lrama LALR (1) parser generatorを実装した](https://yui-knk.hatenablog.com/entry/2023/03/13/101951)


## 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` and `RubyVM::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 からの変更点

### IRB

IRBは様々な機能強化を行いました。主なものは以下の通りです。

* IRBとrdbgの連携 pry-byebugのような使い心地でデバッグできるようになりました。([使い方](https://github.com/ruby/irb#debugging-with-irb))
* lsコマンドやshow_cmdsの出力がPagerで表示されるようになりました。
* lsコマンドやshow_sourceコマンドがより便利で詳細な情報を出力するようになりました。

また、機能強化以外にも、数多くのバグ修正および将来的な機能拡張を見越した大規模なリファクタリングを行ないました。


## 互換性に関する変更

### 定数の削除

以下の非推奨定数は削除されました



### メソッドの削除

以下の非推奨のメソッドは削除されました


## 標準添付ライブラリの互換性に関する変更

### `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 は削除されました


## 標準添付ライブラリのアップデート

RubyGems と Bundler は将来リリースされる Ruby で bundled gems となる予定の gem が require された際に警告を行う機能が追加されました。

以下の default gems のバージョンがアップデートされました。

* RubyGems 3.5.0.dev
* bigdecimal 3.1.4
* bundler 2.5.0.dev
* csv 3.2.8
* erb 4.0.3
* fiddle 1.1.2
* fileutils 1.7.1
* irb 1.7.4
* nkf 0.1.3
* optparse 0.4.0.pre.1
* psych 5.1.0
* reline 0.3.8
* stringio 3.0.9
* strscan 3.0.7
* syntax_suggest 1.1.0
* time 0.2.2
* timeout 0.4.0
* uri 0.12.2
* yarp 0.9.0

以下の bundled gems のバージョンがアップデートされました。

* minitest 5.19.0
* test-unit 3.6.1
* rexml 3.2.6
* rss 0.3.0
* net-imap 0.3.7
* rbs 3.2.1
* typeprof 0.21.8
* debug 1.8.0

新たに以下の gem が bundled gems として添付されました。

* racc 1.7.1

default gems と bundled gems の詳細については [Logger の GitHub Releases](https://github.com/ruby/logger/releases) のような GitHub releases または changelog ファイルを参照してください。


その他詳細については、[NEWS](https://github.com/ruby/ruby/blob/v3_3_0_preview2/NEWS.md) ファイルまたは[コミットログ](https://github.com/ruby/ruby/compare/v3_2_0...v3_3_0_preview2)を参照してください。

なお、こうした変更により、Ruby 3.2.0 以降では [4970 個のファイルに変更が加えられ、239635 行の追加と 165275 行の削除が行われました](https://github.com/ruby/ruby/compare/v3_2_0...v3_3_0_preview2#file_bucket) !


## ダウンロード

* <https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.tar.gz>

      SIZE: 21074209
      SHA1: cf7329019235dc36b8e3f382a8b8b744922b1163
      SHA256: 30ce8b0fe11b37b5ac088f5a5765744b935eac45bb89a9e381731533144f5991
      SHA512: 1c5a13e519e8487fd40d932b96d14fa729521925c288e7841ab5eada628e506ceca2605bae36eea1aa505d9253383d53cd933b7a4bff96e6de5b1130c7c558e6

* <https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.tar.xz>

      SIZE: 15600992
      SHA1: 606d6423137a24eef4f6b07d167596b63c7aaa17
      SHA256: 62b1c4f586c70bf1cb58f2d909d0d824506315782e835f9dd3fcc0b659a70fc1
      SHA512: 5ff609a66b7359006df0d87477cf70e6e26c5f40ced81b8254f8154f4fc82c77fed297471b55706c1a4466f2a4257999e933b2ed085f695ace265757ab9500a2

* <https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.zip>

      SIZE: 26095651
      SHA1: 4441cd0db23d133e6e2f7dea28f931a68dac6ca5
      SHA256: c9771d24c9b1eab532c04ed076087285601693e4d1c63f131fd078c47c5c0cea
      SHA512: bfeed21d011f891fe22510fe7242992c98f7fd2ce863d8be5740f56a34b726134cb3f5304e8b2dcd468fbc939648f10aae482eee15c1bf6c64b705484ed9e197

## Ruby とは

Rubyはまつもとゆきひろ (Matz) によって1993年に開発が始められ、今もオープンソースソフトウェアとして開発が続けられています。Rubyは様々なプラットフォームで動き、世界中で、特にWebアプリケーション開発のために使われています。
