Skip to content

Commit 5425fb7

Browse files
committed
Translate Ruby 3.3.0 rc1 released news post (zh_tw)
1 parent 8dba0bc commit 5425fb7

File tree

1 file changed

+297
-0
lines changed

1 file changed

+297
-0
lines changed
Lines changed: 297 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,297 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 3.3.0-rc1 發布"
4+
author: "naruse"
5+
translator: "Bear Su"
6+
date: 2023-12-11 00:00:00 +0000
7+
lang: zh_tw
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.3.0-rc1" | first %}
11+
我們很高興宣布 Ruby {{ release.version }} 發佈了。 Ruby 3.3 新增了名為 Prism 的 Parser,使用了 Lrama 做為 Parser 產生器,新增了名為 RJIT,純 Ruby 開發的 JIT 編譯器,以及更多效能提升,尤其是 YJIT。
12+
13+
RC1 版本發布後,我們會盡可能避免加入 ABI 不相容的功能。如果有必要,我們將會在發佈紀錄中宣布。
14+
15+
## Prism
16+
17+
* 導入 [the Prism parser](https://github.com/ruby/prism) 為預設 gem。
18+
* Prism 是可移植、可容錯、且可維護的 Ruby 語言遞迴下降解析器。
19+
* Prism 已可用於生產環境,並積極維護,您可以用來替代 Ripper。
20+
* 有關如何使用 Prism 的 [詳細文件](https://ruby.github.io/prism/)
21+
* Prism 是 CRuby 內部使用的 C 函式庫,同時也是任何需要解析 Ruby 程式碼的工具鏈可以使用的 Ruby gem。
22+
* Prism API 中值得注意的方法為:
23+
* `Prism.parse(source)` 回傳 AST 作為 ParseResult 的一部分。
24+
* `Prism.dump(source, filepath)` 回傳字串型別的序列化的 AST。
25+
* `Prism.parse_comments(source)` 回傳註解。
26+
* 如果您有興趣貢獻,您可以直接在 [the Prism repository](https://github.com/ruby/prism) 上建立 pull requests 或 issues。
27+
28+
## 使用 Lrama 取代 Bison
29+
30+
* 使用 [Lrama LALR parser generator](https://github.com/ruby/lrama) [Feature #19637](https://bugs.ruby-lang.org/issues/19637) 取代 Bison。
31+
* 如果您感興趣,請參閱 [The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html)
32+
* 為了維護性,Lrama internal parser 改用 Racc 產生的 LR parser。
33+
* 支援 Parameterizing Rules `(?, *, +)`,能夠在 Ruby parse.y 中被使用。
34+
35+
## RJIT
36+
37+
* 導入純 Ruby 開發的 JIT 編譯器 RJIT 並取代 MJIT。
38+
* RJIT 僅支援 x86\_64 架構的 Unix 平台。
39+
* 不同於 MJIT,RJIT 在執行時不需要 C 編譯器。
40+
* RJIT 目前還在實驗階段。
41+
* 您在生產環境應繼續使用 YJIT。
42+
* 如果您有興趣為 Ruby 開發 JIT,請參閱 [k0kubun's 在 RubyKaigi 第 3 天的演講](https://rubykaigi.org/2023/presentations/k0kubun.html#day3)
43+
44+
## YJIT
45+
46+
* 自 3.2 主要效能提升
47+
* 改善 splat 和 rest arguments 的支援。
48+
* 虛擬機器分配了暫存器,用於堆疊操作。
49+
* 更多帶有可選參數的呼叫會被編譯。
50+
* 錯誤處理也會被編譯。
51+
* Megamorphic Object Shapes 的實體變數不再返回給直譯器。
52+
* 不支援的呼叫類型不再返回給直譯器。
53+
* 特別改善了 `Integer#!=``String#!=``Kernel#block_given?``Kernel#is_a?`
54+
`Kernel#instance_of?``Module#===`
55+
* 目前比 optcarrot 的直譯器快上 3 倍!
56+
* 自 3.2 以來顯著提高了記憶體使用率
57+
* 已編譯的程式碼的 Metadata 使用更少的記憶體。
58+
* 在 ARM64 產生更緊湊的程式碼。
59+
* 編譯速度比 3.2 稍快一些。
60+
* 新增 `RubyVM::YJIT.enable`,可以在 run-time 中啟用 YJIT。
61+
* 您可以在不修改指令列參數或環境變數的情況下啟動 YJIT。
62+
* 可用於僅在您的應用程式完成啟動後啟用 YJIT。 如果您在啟動程式時停用了 YJIT,可以使用 `--yjit-disable` 來使用其他 YJIT 選項。
63+
* 預設停用程式碼 GC,並可使用 `--yjit-exec-mem-size` 作為新程式碼編譯停止的硬限制。
64+
* 可以在使用 unicorn 和 forking 的伺服器上產生更好的 copy-on-write 行為。
65+
* 不會因為程式碼 GC 導致效能突然下降。
66+
* 如果需要,您仍然可以使用 `--yjit-code-gc` 啟用程式碼 GC。
67+
* 發布版本現在提供透過 `--yjit-stats` 產生的 `ratio_in_yjit` 統計資訊,不再需要特殊的統計資訊或是開發版本。
68+
* Exit tracing 選項現在支援抽樣
69+
* `--trace-exits-sample-rate=N`
70+
* 新增 `--yjit-perf` 以便於使用 Linux perf 進行性能分析。
71+
* 更多測試與錯誤修復
72+
73+
74+
### M:N thread scheduler
75+
76+
* 導入 M:N thread scheduler。 [[Feature #19842]](https://bugs.ruby-lang.org/issues/19842)
77+
* M 個 Ruby 執行緒由 N 個原生執行緒(OS 執行緒)管理,所以能減少執行緒建立與管理的成本。
78+
* 由於會破壞 C-extension 的相容性,所以預設在主 Ractor 上停用 M:N thread scheduler。
79+
* 透過 `RUBY_MN_THREADS=1` 環境變數在主 Ractor 啟用 M:N threads。
80+
* 在非主 Ractors 上啟用 M:N threads。
81+
* 可使用 `RUBY_MAX_CPU=n` 環境變數設定 `N` 的最大值 (原生執行緒的最大數量)。預設值為 8。
82+
* 由於每一個 Ractor 同時只能執行一個 Ruby 執行緒,所以將使用原生執行緒的數量,即 `RUBY_MAX_CPU` 和執行 Ractor 數量中較小的值,因此單一 Ractor 應用程式 (大多數應用程式) 會使用一個原生執行緒。
83+
* 為支援阻塞操作,可以使用多餘 `N` 個原生執行緒。
84+
85+
## 其他值得注意的新功能
86+
87+
88+
89+
### 語言功能
90+
91+
92+
93+
## 效能提升
94+
95+
* `defined?(@ivar)` 透過 Object Shapes 提升效能。
96+
* 像是 `Socket.getaddrinfo` 的域名解析現在可以被中斷 (在可用 pthreads 的環境下)。 [Feature #19965](https://bugs.ruby-lang.org/issues/19965)
97+
* 為此,現在每當呼叫 getaddrinfo 或 getnameinfo 時都會建立一個 pthread。這會在域名解析中產生一些開銷 (在我們的實驗中約 2.5 倍)。我們預期域名解析的開銷不會對大多數應用程式造成問題,如果您相信您因為此變更收到非預期的影響,請向我們回報。
98+
* 垃圾收集器的一些效能提升
99+
* 被舊物件參考的年輕物件不再立即提升為舊世代。這顯著降低了 major GC 收集的頻率。 [[Feature #19678]](https://bugs.ruby-lang.org/issues/19678)
100+
* 新增調整變數 `RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO` 用來控制導致觸發 major GC 收集的未受保護物件的數量。預設為 `0.01` (1%)。這顯著降低了 major GC 收集的頻率。 [Feature #19571](https://bugs.ruby-lang.org/issues/19571)
101+
* 為幾個缺少寫入屏障(Write Barriers)的核心類型進行實作,特別是 `Time`, `Enumerator`, `MatchData`, `Method`, `File::Stat`, `BigDecimal` 等。這顯著地減少 minor GC 收集時間與 major GC 收集頻率。
102+
* 大部分核心類別現在使用可變寬度分配,特別是 `Hash`, `Time`, `Thread::Backtrace`, `Thread::Backtrace::Location`, `File::Stat`, `Method`
103+
這使得這些類別更快被分配與釋放,使用更少的記憶體與減少堆疊碎片。
104+
* 垃圾收集器加入弱參考的支援。 [Feature #19783](https://bugs.ruby-lang.org/issues/19783)
105+
106+
107+
## 自 3.2 以來其他值得注意的變更
108+
109+
### IRB
110+
111+
IRB 進行了數項改善,包括但不限於:
112+
113+
- 加強 `irb:rdbg` 整合以提供與 `pry-byebug` 相同的除錯體驗 ([文件](https://github.com/ruby/irb#debugging-with-irb))。
114+
- Pager 支援指令,例如 `ls``show_cmds`
115+
- `ls``show_source` 指令提供了更準確和有幫助的資訊。
116+
- 使用 type 分析的實驗係自動補齊 ([doc](https://github.com/ruby/irb#type-based-completion))。
117+
- 透過新導入的類別 Reline::Face,可以更改補齊視窗中的字體顏色與字體樣式 ([doc](https://github.com/ruby/ruby/blob/master/doc/reline/face.md))。
118+
119+
此外,IRB 還進行了大量重構和修復了許多錯誤,以方便未來強化功能。
120+
121+
## 相容性問題
122+
123+
注意:不包含功能問題的修正。
124+
125+
* 棄用在沒有普通參數的區塊中不帶參數呼叫 `it`。 在 Ruby 3.4 中 `it` 將會參考 block 的第一個參數。
126+
[Feature #18980](https://bugs.ruby-lang.org/issues/18980)
127+
128+
### 被移除的常數
129+
130+
下列廢棄的常數已被移除。
131+
132+
133+
134+
### 被移除的方法
135+
136+
下列廢棄的方法已被移除。
137+
138+
### 被移除的環境變數
139+
140+
下列廢棄的環境變數已被移除。
141+
142+
* 環境變數 `RUBY_GC_HEAP_INIT_SLOTS` 已經被廢棄且無法使用。請使用環境變數 `RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS` 作為替代。 [Feature #19785](https://bugs.ruby-lang.org/issues/19785)
143+
144+
## Stdlib 相容性問題
145+
146+
### `ext/readline` 已被淘汰
147+
148+
* 我們使用純 Ruby 實作並相容於 `ext/readline` API 的 `reline`。未來我們將依賴 `reline`。如果您需要使用 `ext/readline`,您可以使用 `gem install readline-ext` 透過 rubygems.org 安裝 `ext/readline`
149+
* 我們將不再需要安裝函式庫例如 `libreadline``libedit`
150+
151+
## C API updates
152+
153+
### 更新的 C APIs
154+
155+
下列的 APIs 已被更新。
156+
157+
158+
159+
### 被移除的 C APIs
160+
161+
下列廢棄的 APIs 已被移除。
162+
163+
164+
165+
## 標準函式庫更新
166+
167+
如果使用者 require 的 gem 已排定在未來 Ruby 版本中變更為 bundled gems,RubyGems 和 Bundler 將會顯示警告。
168+
169+
這些函式庫包括:
170+
* abbrev
171+
* base64
172+
* bigdecimal
173+
* csv
174+
* drb
175+
* getoptlong
176+
* mutex_m
177+
* nkf
178+
* observer
179+
* racc
180+
* resolv-replace
181+
* rinda
182+
* syslog
183+
184+
加入了以下的預設 gem。
185+
186+
* prism 0.15.1
187+
188+
更新了以下的 bundled gem。
189+
190+
* RubyGems 3.5.0.dev
191+
* base64 0.2.0
192+
* benchmark 0.3.0
193+
* bigdecimal 3.1.5
194+
* bundler 2.5.0.dev
195+
* cgi 0.4.0
196+
* csv 3.2.8
197+
* date 3.3.4
198+
* delegate 0.3.1
199+
* drb 2.2.0
200+
* english 0.8.0
201+
* erb 4.0.3
202+
* etc 1.4.3.dev.1
203+
* fcntl 1.1.0
204+
* fiddle 1.1.2
205+
* fileutils 1.7.2
206+
* find 0.2.0
207+
* getoptlong 0.2.1
208+
* io-console 0.6.1.dev
209+
* irb 1.8.3
210+
* logger 1.6.0
211+
* mutex_m 0.2.0
212+
* net-http 0.4.0
213+
* net-protocol 0.2.2
214+
* nkf 0.1.3
215+
* observer 0.1.2
216+
* open-uri 0.4.0
217+
* open3 0.2.0
218+
* openssl 3.2.0
219+
* optparse 0.4.0
220+
* ostruct 0.6.0
221+
* pathname 0.3.0
222+
* pp 0.5.0
223+
* prettyprint 0.2.0
224+
* pstore 0.1.3
225+
* psych 5.1.1.1
226+
* rdoc 6.6.0
227+
* reline 0.3.9
228+
* rinda 0.2.0
229+
* securerandom 0.3.0
230+
* shellwords 0.2.0
231+
* singleton 0.2.0
232+
* stringio 3.0.9
233+
* strscan 3.0.7
234+
* syntax_suggest 1.1.0
235+
* tempfile 0.2.0
236+
* time 0.3.0
237+
* timeout 0.4.1
238+
* tmpdir 0.2.0
239+
* tsort 0.2.0
240+
* un 0.3.0
241+
* uri 0.13.0
242+
* weakref 0.1.3
243+
* win32ole 1.8.10
244+
* yaml 0.3.0
245+
* zlib 3.1.0
246+
247+
下列的預設 gem 現在是 bundled gems。
248+
249+
* racc 1.7.3
250+
251+
更新了以下的 bundled gem。
252+
253+
* minitest 5.20.0
254+
* rake 13.1.0
255+
* test-unit 3.6.1
256+
* rexml 3.2.6
257+
* rss 0.3.0
258+
* net-imap 0.4.4
259+
* net-smtp 0.4.0
260+
* rbs 3.2.2
261+
* typeprof 0.21.8
262+
* debug 1.8.0
263+
264+
請參閱 GitHub 發布如 [Logger](https://github.com/ruby/logger/releases) 和變更紀錄來了解更多關於預設 gems 與 bundled gems 的資訊。
265+
266+
參見 [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)
267+
[commit logs](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}) 來了解更多。
268+
269+
自 Ruby 3.2.0 以來,計[{{ release.stats.files_changed }} 檔案變更,{{ release.stats.insertions }} 行新增(+),{{ release.stats.deletions }} 行刪減(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket)。
270+
271+
272+
## Download
273+
274+
* <{{ release.url.gz }}>
275+
276+
SIZE: {{ release.size.gz }}
277+
SHA1: {{ release.sha1.gz }}
278+
SHA256: {{ release.sha256.gz }}
279+
SHA512: {{ release.sha512.gz }}
280+
281+
* <{{ release.url.xz }}>
282+
283+
SIZE: {{ release.size.xz }}
284+
SHA1: {{ release.sha1.xz }}
285+
SHA256: {{ release.sha256.xz }}
286+
SHA512: {{ release.sha512.xz }}
287+
288+
* <{{ release.url.zip }}>
289+
290+
SIZE: {{ release.size.zip }}
291+
SHA1: {{ release.sha1.zip }}
292+
SHA256: {{ release.sha256.zip }}
293+
SHA512: {{ release.sha512.zip }}
294+
295+
## Ruby 是什麼
296+
297+
Ruby 最初由 Matz(Yukihiro Matsumoto)於 1993 年開發的開源軟體。可以在許多平台上執行。使用者來自世界各地,特別活躍於網路開發領域。

0 commit comments

Comments
 (0)