Skip to content

Commit deef62d

Browse files
authored
Merge pull request #2744 from jinroq/2021-11-09-ruby-3-1-0-preview1-released_ja
Japanese translation of "Ruby 3.1.0 Preview 1 Released"
2 parents 44a0364 + cd5d083 commit deef62d

File tree

1 file changed

+210
-0
lines changed

1 file changed

+210
-0
lines changed
Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 3.1.0 Preview 1 リリース"
4+
author: "naruse"
5+
translator: "jinroq"
6+
date: 2021-11-09 00:00:00 +0000
7+
lang: ja
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.1.0-preview1" | first %}
11+
12+
Ruby 3.1 に向けてフィードバックを得るためのリリースである、Ruby {{ release.version }} が公開されました。
13+
14+
## YJIT: 新しいインプロセス JIT コンパイラ (experimental)
15+
16+
Ruby 3.1 には、Shopify 社が開発した新しいインプロセス JIT コンパイラである YJIT をマージしています。
17+
18+
[2018 年に Ruby 2.6 が MJIT を導入](https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-released/)して以降、パフォーマンスは大幅に向上し、ついに[昨年 Ruby3x3 を達成しました](https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/)。しかし、この JIT は Optcarrot では目覚ましい速度改善を示したものの、実世界のプロダクトで運用するには厳しいものでした。
19+
20+
近年 Shopify 社は Rails アプリケーションを高速化するために Ruby へ多くの改善をしてくれました。その中でも YJIT は重要な貢献であり、また、Rails アプリケーションのパフォーマンス向上を目的としています。
21+
22+
MJIT はメソッドベースの JIT コンパイラであり、外部 C コンパイラを使用します。一方、YJIT は Basic Block Versioning を使用し、その中に JIT コンパイラを含みます。 Lazy Basic Block Versioning(LBBV)では、最初にメソッドの先頭をコンパイルし、引数と変数の型が動的に決定されると、残りをインクリメンタルにコンパイルします。詳細な概要については [YJIT: a basic block versioning JIT compiler for CRuby](https://dl.acm.org/doi/10.1145/3486606.3486781) を参照してください。
23+
24+
この技術により、YJIT は実世界の多くのプロダクトで高速な起動時間とパフォーマンス向上の両方を実現しています。railsbench 上で 22%、liquid-render 上で 39% の改善を実現しています。
25+
26+
<!-- 試す人向けのお知らせ -->
27+
28+
YJIT はまだ実験的な機能であるため、デフォルトでは無効になっています。使用するにはコマンドラインオプション `--yjit` を指定して YJIT を有効にします。また YJIT が仕様できる環境は、現時点では x86-64 プラットフォーム搭載の macOS および Linux に限定されています。
29+
30+
* [https://bugs.ruby-lang.org/issues/18229](https://bugs.ruby-lang.org/issues/18229)
31+
* [https://shopify.engineering/yjit-just-in-time-compiler-cruby](https://shopify.engineering/yjit-just-in-time-compiler-cruby)
32+
* [https://www.youtube.com/watch?v=PBVLf3yfMs8](https://www.youtube.com/watch?v=PBVLf3yfMs8)
33+
34+
## debug gem: 新しいデバッガ
35+
36+
新しいデバッガ [debug.gem](https://github.com/ruby/debug) がバンドルされています。 debug.gem は高速なデバッガであり、リモートデバッグ、色付き REPL、IDE integration(VSCode)など多くの機能を提供します。これは標準添付ライブラリの `lib/debug.rb` に置き換えられます。
37+
38+
## error_highlight: バックトレース内でさらに詳細なエラー箇所を示す機能
39+
40+
組み込み gem である error_highlight が導入されました。バックトレース内でさらに詳細なエラー箇所を示すことができます:
41+
42+
```
43+
$ ruby test.rb
44+
test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError)
45+
46+
1.time {}
47+
^^^^^
48+
Did you mean? times
49+
```
50+
51+
この gem はデフォルトで有効になっています。コマンドラインオプション `--disable-error_highlight` を使用して無効にできます。詳細は[リポジトリ](https://github.com/ruby/error_highlight)を参照してください。
52+
53+
## Irb の改善
54+
55+
次の preview 版で説明します。
56+
57+
## その他の主要な新機能
58+
59+
### 言語仕様
60+
61+
* ハッシュリテラルとキーワード引数の値は省略できます [Feature #14579]
62+
* `{x:, y:}``{x: x, y: y}` の糖衣構文です
63+
* `foo(x:, y:)``foo(x: x, y: y)` の糖衣構文です
64+
65+
* パターンマッチングのピン演算子が式を受け取るようになりました [Feature #17411]
66+
67+
```ruby
68+
Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a
69+
#=> [[3, 5], [5, 7], [11, 13]]
70+
```
71+
72+
### RBS
73+
74+
RBS は Ruby プログラムの構造を記述するための言語です。詳細は[リポジトリ](https://github.com/ruby/rbs)を参照してください。
75+
76+
Ruby 3.0.0 からの変更点:
77+
78+
* gem の RBS を管理する `rbs collection` が導入されています [[doc]](https://github.com/ruby/rbs/blob/master/docs/collection.md)
79+
* 組み込みライブラリおよび標準添付ライブラリの多くのシグネチャが追加/更新されています
80+
* 多くのバグ修正とパフォーマンスの改善も含まれています
81+
82+
詳細は [CHANGELOG.md](https://github.com/ruby/rbs/blob/master/CHANGELOG.md) を参照してください。
83+
84+
### TypeProf
85+
86+
TypeProf は Ruby の静的型解析器です。型注釈のない Ruby コードから RBS のプロトタイプを生成します。詳細は[ドキュメント](https://github.com/ruby/typeprof/blob/master/doc/doc.md)を参照してください。
87+
88+
Ruby 3.0.0 からの変更点:
89+
90+
* [IDE サポート](https://github.com/ruby/typeprof/blob/master/doc/ide.md)が実装されました (Experimental)
91+
* 多くのバグ修正とパフォーマンスの改善も含まれています
92+
93+
## パフォーマンスの改善
94+
95+
* MJIT
96+
* Rails のようなワークロードのために、`--jit-max-cache` のデフォルト値を 100 から 10000 に変更しています。
97+
JIT コンパイラは 1000 命令列長より長いメソッドのコンパイルをスキップしなくなりました
98+
* Rails の Zeitwerk モードをサポートするために、クラスイベントで TracePoint が有効になっている場合に JIT コンパイルされたコードをキャンセルしなくなりました
99+
100+
## その他の注目すべき 3.0 からの変更点
101+
102+
* 1 行パターンマッチ(例: `ary => [x, y, z]`)が experimental ではなくなりました
103+
* 多重代入の評価順序が若干変更されました [[Bug #4443]](https://bugs.ruby-lang.org/issues/4443)
104+
* Ruby 3.0では `foo[0], bar[0] = baz, qux``baz`, `qux`,`foo`, `bar` の順に評価されていました。Ruby 3.1 からは `foo`,`bar`, `baz`,`qux` の順に評価されるようになります
105+
* 文字列の可変幅割り当て (experimental) [[Bug #18239]](https://bugs.ruby-lang.org/issues/18239)
106+
107+
### 標準添付ライブラリの更新
108+
109+
* いくつかの標準添付ライブラリが更新されています
110+
* RubyGems
111+
* Bundler
112+
* RDoc 6.4.0
113+
* ReLine
114+
* JSON 2.6.0
115+
* Psych 4.0.2
116+
* FileUtils 1.6.0
117+
* Fiddle
118+
* StringIO 3.0.1
119+
* IO::Console 0.5.9
120+
* IO::Wait 0.2.0
121+
* CSV
122+
* Etc 1.3.0
123+
* Date 3.2.0
124+
* Zlib 2.1.1
125+
* StringScanner
126+
* IpAddr
127+
* Logger 1.4.4
128+
* OStruct 0.5.0
129+
* Irb
130+
* Racc 1.6.0
131+
* Delegate 0.2.0
132+
* Benchmark 0.2.0
133+
* CGI 0.3.0
134+
* Readline(C-ext) 0.1.3
135+
* Timeout 0.2.0
136+
* YAML 0.2.0
137+
* URI 0.11.0
138+
* OpenSSL
139+
* DidYouMean
140+
* Weakref 0.1.1
141+
* Tempfile 0.1.2
142+
* TmpDir 0.1.2
143+
* English 0.7.1
144+
* Net::Protocol 0.1.2
145+
* Net::Http 0.2.0
146+
* BigDecimal
147+
* OptionParser 0.2.0
148+
* Set
149+
* Find 0.1.1
150+
* Rinda 0.1.1
151+
* Erb
152+
* NKF 0.1.1
153+
* Base64 0.1.1
154+
* OpenUri 0.2.0
155+
* SecureRandom 0.1.1
156+
* Resolv 0.2.1
157+
* Resolv::Replace 0.1.0
158+
* Time 0.2.0
159+
* PP 0.2.1
160+
* Prettyprint 0.1.1
161+
* Drb 2.1.0
162+
* Pathname 0.2.0
163+
* Digest 3.1.0.pre2
164+
* Un 0.2.0
165+
* 以下のバンドルされた gems が更新されています
166+
* minitest 5.14.4
167+
* power_assert 2.0.1
168+
* rake 13.0.6
169+
* test-unit 3.5.0
170+
* rbs 1.6.2
171+
* typeprof 0.20.0
172+
* 以下のデフォルト gems がバンドルされた gem になりました
173+
* net-ftp
174+
* net-imap
175+
* net-pop
176+
* net-smtp
177+
* matrix
178+
* prime
179+
180+
詳細は [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) か [commit logs](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}) を参照してください。
181+
182+
なお、こうした変更により、Ruby 3.0.0 以降では [{{ release.stats.files_changed }} 個のファイルに変更が加えられ、 {{ release.stats.insertions }} 行の追加と {{ release.stats.deletions }} 行の削除が行われました](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}#file_bucket)!
183+
184+
## ダウンロード
185+
186+
* <{{ release.url.gz }}>
187+
188+
SIZE: {{ release.size.gz }}
189+
SHA1: {{ release.sha1.gz }}
190+
SHA256: {{ release.sha256.gz }}
191+
SHA512: {{ release.sha512.gz }}
192+
193+
* <{{ release.url.xz }}>
194+
195+
SIZE: {{ release.size.xz }}
196+
SHA1: {{ release.sha1.xz }}
197+
SHA256: {{ release.sha256.xz }}
198+
SHA512: {{ release.sha512.xz }}
199+
200+
* <{{ release.url.zip }}>
201+
202+
SIZE: {{ release.size.zip }}
203+
SHA1: {{ release.sha1.zip }}
204+
SHA256: {{ release.sha256.zip }}
205+
SHA512: {{ release.sha512.zip }}
206+
207+
## Ruby とは
208+
209+
Ruby はまつもとゆきひろ(Matz)によって 1993 年に開発が始められ、今もオープンソースソフトウェアとして開発が続けられています。
210+
Ruby は様々なプラットフォームで動き、世界中で、特に Web アプリケーション開発のために使われています。

0 commit comments

Comments
 (0)