あけましておめでとうございます。旧聞に属しますが、昨年クリスマスにRuby 3.2.0が予定通りリリースされました。
Link: Ruby 3.2.0 リリース
https://t.co/1NekuAVFgY— Yukihiro Matz (@yukihiro_matz) December 25, 2022
- リリース情報: Ruby 3.2.0 リリース
なお、Ruby 2系最後のバージョンであるRuby 2.7.xは、2023/03/31以降にサポートが終了することが予想されます。Ruby 2系を使っているプロジェクトは早めにRuby 3系への移行準備をしておきましょう。
Ruby 3.2.0のビルド方法については以下の記事をどうぞ。
🔗 更新の概要
Ruby 3.2.0では新しい構文の導入や構文の変更は控えられており、機能追加や最適化、バグ修正が中心です。特にData
クラスは使いでがありそうです。
なお、Ruby 3.2.0最終リリースノートはRuby 3.2.0 RC 1リリースの時点のリリース情報↓にだいぶ追記されています。
Ruby 3.2.0の目玉機能をいくつかリストアップします。詳しくは公式のリリース情報をご覧ください。
- イミュータブルな値オブジェクトに使える
Data
クラスがコアに追加された - 正規表現のReDoS対策
Regexp.timeout
グローバル設定の導入- マッチングアルゴリズムをメモ化の最適化によって改善(19104)
- SyntaxSuggest機能の導入(18159)
- TypeErrorとArgumentErrorの引数を下線表示するようになった
- YJITが実験段階を終えて正式採用となった
- x86-64とarm64/aarch64両方でビルド可能に
- Ruby 3.1のYJITより高速化され、メモリオーバーヘッドも削減された
- YJITのビルドにはRust 1.58.0以降が必要
- YJITはオプションであり、なしでも実行可能
- YJITがオブジェクトシェイプを利用する形で最適化された(18776)
- MJITコンパイラが
ruby_vm/mjit/compiler
として再実装された - IRBが強化された
- WASIベースのWebAssemblyサポート(#5407)
- 引数の受け渡しや定数の評価順序などでバグ修正や改修が行われた
- パターンマッチングのfindパターンが正式になった(18585)
- Bundlerの依存解決ライブラリがMolinilloからPubGrabに変更された
- 今後RubyGemsもPubGrabに移行する計画があるとのこと
Fixnum
やBignum
などいくつかの非推奨定数が削除されたDir.exists?
やFile.exists?
などいくつかの非推奨メソッドが削除された
これらの削除は、古いgemやコードで影響が生じる可能性があるかもしれません。
参考: 関連読み物
関連リポジトリ
rbenvのruby-buildは早々にRuby 3.2.0に対応しました。
参考: Release ruby-build 20221225 · rbenv/ruby-build · GitHub
Docker Hubでは翌日にRuby 3.2.0イメージがリリースされました。
参考: ruby - Official Image | Docker Hub
なお、Docker HubのRubyでRust版YJITの対応をどうするかは現在審議中です↓。
参考: Add YJIT support to debian 3.2+ by paihu · Pull Request #400 · docker-library/ruby · GitHub
HerokuでRuby 3.2.0のYJITを有効にする方法は以下のschneemsさんの書き込みで紹介されていました。
参考: Ruby 3.2.0 Released : ruby
# Ruby 3.2.0のYJITを有効にするコマンド
heroku config:set RUBYOPT=’--enable-yjit’