|
| 1 | +--- |
| 2 | +layout: news_post |
| 3 | +title: "Ruby 3.4.0-rc1 リリース" |
| 4 | +author: "naruse" |
| 5 | +translator: "npakk" |
| 6 | +date: 2024-12-12 00:00:00 +0000 |
| 7 | +lang: ja |
| 8 | +--- |
| 9 | + |
| 10 | +{% assign release = site.data.releases | where: "version", "3.4.0-rc1" | first %} |
| 11 | +Ruby {{ release.version }} が公開されました。 |
| 12 | + |
| 13 | +## デフォルトのパーサをPrismに変更 |
| 14 | + |
| 15 | +デフォルトで使用するパーサーを parse.y から生成するパーサーから Prism へと変更しました。 [[Feature #20564]] |
| 16 | + |
| 17 | +## Modular GC |
| 18 | + |
| 19 | +* Modular GC 機能により Ruby 標準とは異なる ガベージ・コレクタ (GC) の実装を動的にロードすることができるようになりました。この機能を使うには Ruby をビルドする時に `--with-modular-gc` を指定してください。GC ライブラリは環境変数 `RUBY_GC_LIBRARY` を用いて Ruby のランタイムにロードすることができます。[[Feature #20351]] |
| 20 | + |
| 21 | +* Ruby 組み込みのガベージ・コレクタは `gc/default/default.c` ファイルに分割され、 Ruby ランタイムとのやりとりは `gc/gc_impl.h` に定義される API を用いて行われます。組み込みのガベージコレクタは `make modular-gc MODULAR_GC=default` というコマンドを用いてライブラリとしてもビルドすることができ、環境変数として `RUBY_GC_LIBRARY=default` を定義することで有効にすることができます。 [[Feature #20470]] |
| 22 | + |
| 23 | +* [MMTk](https://www.mmtk.io/) をベースとした実験的な GC ライブラリが提供されました。このライブラリは`make modular-gc MODULAR_GC=mmtk` コマンドによってビルドし、環境変数 `RUBY_GC_LIBRARY=mmtk` によって有効化します。この機能を使うにはビルドを行うマシンに Rust のビルドツールを必要とします。 [[Feature #20860]] |
| 24 | + |
| 25 | +## 言語機能の変更 |
| 26 | + |
| 27 | +* マジックコメント `frozen_string_literal` のないファイル中の文字列リテラルは、freeze されているかのように振る舞うようになり、破壊的な変更時に警告を表示するようになりました。これらの警告はコマンドラインオプション `-W:deprecated` か Ruby プログラムで `Warning[:deprecated] = true` を指定すると表示されます。 |
| 28 | +これら無効にするにはコマンドラインオプション `--disable-frozen-string-literal` を追加して Ruby を実行してください。 [[Feature #20205]] |
| 29 | + |
| 30 | +* ブロックパラメータに名前をつけずに参照する `it` が追加されました。 [[Feature #18980]] |
| 31 | + |
| 32 | +* メソッド呼び出し時の `nil` 展開キーワードがサポートされました。 |
| 33 | + `**nil` は `**{}` と同様に扱われ、キーワードは渡せません。 |
| 34 | + また、あらゆる変換のためのメソッドも呼ばれません。[[Bug #20064]] |
| 35 | + |
| 36 | +* インデックスにブロックを渡せなくなりました。[[Bug #19918]] |
| 37 | + |
| 38 | +* インデックスにキーワード引数を渡せなくなりました。[[Bug #20218]] |
| 39 | + |
| 40 | +## YJIT |
| 41 | + |
| 42 | +### TL;DR |
| 43 | + |
| 44 | +* x86-64 と arm64 の両方のプラットフォームにおいて、ほとんどのベンチマークのパフォーマンスが向上しました。 |
| 45 | +* コンパイルメタデータのメモリ使用量を削減しました。 |
| 46 | +* 様々な不具合修正: YJIT はより堅牢になり、より多くの環境でテストされました。 |
| 47 | + |
| 48 | +### 新機能 |
| 49 | + |
| 50 | +* `--yjit-mem-size` による統一的なメモリ制限が指定可能になりました(デフォルトは 128MiB)。 |
| 51 | + このオプションはすべての YJIT のメモリ使用量を監視し、従来の `--yjit-exec-mem-size` オプションよりも直感的に使用できます。 |
| 52 | +* `RubyVM::YJIT.runtime_stats` からより多くの統計情報を取得できるようになりました。 |
| 53 | +* `--yjit-log` オプションを用いて、コンパイルログを監視できるようになりました。 |
| 54 | + * `RubyVM::YJIT.log` を用いてコンパイルログの末尾を取得することができるようになりました。 |
| 55 | +* マルチ Ractor モードにおける定数共有をサポートしました。 |
| 56 | +* `--yjit-trace-exits=COUNTER`オプションを用いて、カウントされたexitを監視できるようになりました。 |
| 57 | + |
| 58 | +### 新しい最適化 |
| 59 | + |
| 60 | +* コンテキストの圧縮化により YJIT のメタデータ保管に必要なメモリを削減しました。 |
| 61 | +* ローカル変数やRubyのメソッドの引数のためにレジスタを割り当てるようになりました。 |
| 62 | +* YJIT が有効な場合に Ruby で実装されたコアクラスを使うようになりました。 |
| 63 | + * Ruby で書き直された `Array#each`, `Array#select`, `Array#map` はより良いパフォーマンスを提供します。 [[Feature #20182]]. |
| 64 | +* 以下のような小さいメソッドをインライン化できるようになりました: |
| 65 | + * 空メソッド |
| 66 | + * 定数を返すメソッド |
| 67 | + * `self` を返すメソッド |
| 68 | + * 引数を直接返すメソッド |
| 69 | +* 組み込みメソッドに特化したコード生成の対象を広げました |
| 70 | +* `String#getbyte`, `String#setbyte` など、String のメソッドの最適化を行いました。 |
| 71 | +* 低レベルの bit/byte 操作を高速化するためにビット演算を最適化しました |
| 72 | +* その他、様々な段階的な最適化を行いました。 |
| 73 | + |
| 74 | +## コアクラスのアップデート |
| 75 | + |
| 76 | +注: 複数のアップデートの中から注目すべきアップデートのみを掲載しています。 |
| 77 | + |
| 78 | +* Exception |
| 79 | + |
| 80 | + * `Exception#set_backtrace` は `Thread::Backtrace::Location` の配列を受け取れる様になりました。. |
| 81 | + `Kernel#raise`, `Thread#raise` や `Fiber#raise` も同じ配列を受け取れます。[[Feature #13557]] |
| 82 | + |
| 83 | +* Range |
| 84 | + |
| 85 | + * `Range#size` は範囲オブジェクトが反復可能ではない場合は `TypeError` 例外を出すようになりました。[[Misc #18984]] |
| 86 | + |
| 87 | +## 互換性に関する変更 |
| 88 | + |
| 89 | +注: 不具合修正を除きます。 |
| 90 | + |
| 91 | +* エラーメッセージとして表示するバックトレースを変更しました。 |
| 92 | + * 開始の引用符は backtick の代わりにシングルクォートを用いるようになりました。[[Feature #16495]] |
| 93 | + * クラス名が変更しないような場合、メソッド名の前にクラス名を表示するようになりました。[[Feature #19117]] |
| 94 | + * `Kernel#caller`, `Thread::Backtrace::Location` などのメソッドはそれらに応じて変更されました。 |
| 95 | + |
| 96 | + ``` |
| 97 | + Old: |
| 98 | + test.rb:1:in `foo': undefined method `time' for an instance of Integer |
| 99 | + from test.rb:2:in `<main>' |
| 100 | +
|
| 101 | + New: |
| 102 | + test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer |
| 103 | + from test.rb:2:in '<main>' |
| 104 | + ``` |
| 105 | + |
| 106 | +## C API のアップデート |
| 107 | + |
| 108 | +* `rb_newobj` と `rb_newobj_of` (と対応するマクロの `RB_NEWOBJ`, `RB_NEWOBJ_OF`, `NEWOBJ`, `NEWOBJ_OF`) は削除されました。 [[Feature #20265]] |
| 109 | +* 非推奨とされていた `rb_gc_force_recycle` は削除されました。 [[Feature #18290]] |
| 110 | + |
| 111 | +## その他の変更 |
| 112 | + |
| 113 | +* 渡されたブロックを使用しないメソッドにブロックを渡すと、verboseモード(`-w`) で警告が表示されるようになりました。[[Feature #15554]] |
| 114 | + |
| 115 | +* `String.freeze` や `Integer#+` のような JIT とインタプリタによって特別に最適化されたメソッドを再定義すると、performance 警告(`-W:performance` または`Warning[:performance] = true` で有効化)が表示されるようになりました。 [[Feature #20429]] |
| 116 | + |
| 117 | +default gemsやbundled gemsの詳細については[Logger](https://github.com/ruby/logger/releases)などのChangeLogを参照してください。 |
| 118 | + |
| 119 | +より詳細な情報は [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) |
| 120 | +か [commit logs](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }}) を参照してください。 |
| 121 | + |
| 122 | +これらの変更により、Ruby 3.3.0から [{{ release.stats.files_changed }} ファイルが変更され、 {{ release.stats.insertions }} 行が追加され、 {{ release.stats.deletions }} 行が削除されました!](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }}#file_bucket) |
| 123 | + |
| 124 | +## ダウンロード |
| 125 | + |
| 126 | +* <{{ release.url.gz }}> |
| 127 | + |
| 128 | + SIZE: {{ release.size.gz }} |
| 129 | + SHA1: {{ release.sha1.gz }} |
| 130 | + SHA256: {{ release.sha256.gz }} |
| 131 | + SHA512: {{ release.sha512.gz }} |
| 132 | + |
| 133 | +* <{{ release.url.xz }}> |
| 134 | + |
| 135 | + SIZE: {{ release.size.xz }} |
| 136 | + SHA1: {{ release.sha1.xz }} |
| 137 | + SHA256: {{ release.sha256.xz }} |
| 138 | + SHA512: {{ release.sha512.xz }} |
| 139 | + |
| 140 | +* <{{ release.url.zip }}> |
| 141 | + |
| 142 | + SIZE: {{ release.size.zip }} |
| 143 | + SHA1: {{ release.sha1.zip }} |
| 144 | + SHA256: {{ release.sha256.zip }} |
| 145 | + SHA512: {{ release.sha512.zip }} |
| 146 | + |
| 147 | +## Ruby とは |
| 148 | + |
| 149 | +Rubyはまつもとゆきひろ (Matz) によって1993年に開発が始められ、今もオープンソースソフトウェアとして開発が続けられています。Rubyは様々なプラットフォームで動き、世界中で、特にWebアプリケーション開発のために使われています。 |
| 150 | + |
| 151 | +[Feature #13557]: https://bugs.ruby-lang.org/issues/13557 |
| 152 | +[Feature #15554]: https://bugs.ruby-lang.org/issues/15554 |
| 153 | +[Feature #16495]: https://bugs.ruby-lang.org/issues/16495 |
| 154 | +[Feature #18290]: https://bugs.ruby-lang.org/issues/18290 |
| 155 | +[Feature #18980]: https://bugs.ruby-lang.org/issues/18980 |
| 156 | +[Misc #18984]: https://bugs.ruby-lang.org/issues/18984 |
| 157 | +[Feature #19117]: https://bugs.ruby-lang.org/issues/19117 |
| 158 | +[Bug #19918]: https://bugs.ruby-lang.org/issues/19918 |
| 159 | +[Bug #20064]: https://bugs.ruby-lang.org/issues/20064 |
| 160 | +[Feature #20182]: https://bugs.ruby-lang.org/issues/20182 |
| 161 | +[Feature #20205]: https://bugs.ruby-lang.org/issues/20205 |
| 162 | +[Bug #20218]: https://bugs.ruby-lang.org/issues/20218 |
| 163 | +[Feature #20265]: https://bugs.ruby-lang.org/issues/20265 |
| 164 | +[Feature #20351]: https://bugs.ruby-lang.org/issues/20351 |
| 165 | +[Feature #20429]: https://bugs.ruby-lang.org/issues/20429 |
| 166 | +[Feature #20470]: https://bugs.ruby-lang.org/issues/20470 |
| 167 | +[Feature #20564]: https://bugs.ruby-lang.org/issues/20564 |
| 168 | +[Feature #20860]: https://bugs.ruby-lang.org/issues/20860 |
0 commit comments