Skip to content

Commit 0fc2543

Browse files
authored
Merge pull request #3480 from npakk/translate-3.4.0-rc1-released-ja
translate Ruby 3.4.0 rc1 released (ja)
2 parents a695b5e + c6900a3 commit 0fc2543

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
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

Comments
 (0)