Skip to content

Commit 7a73905

Browse files
meisyalhsbt
authored andcommitted
Translate Ruby 3.3.0-preview3 released news post (id)
1 parent 64e506a commit 7a73905

File tree

1 file changed

+308
-0
lines changed

1 file changed

+308
-0
lines changed
Lines changed: 308 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,308 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 3.3.0-preview3 Dirilis"
4+
author: "naruse"
5+
translator: "meisyal"
6+
date: 2023-11-12 00:00:00 +0000
7+
lang: id
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.3.0-preview3" | first %}
11+
Kami dengan senang hati mengumumkan rilis dari Ruby {{ release.version }}.
12+
Ruby 3.3 menambahkan sebuah *parser* baru yang bernama Prism, menggunakan Lrama
13+
sebagai *parser generator*, menambahkan *pure-Ruby* JIT *compiler* baru
14+
yang bernama RJIT, dan memperbaiki performa khususnya YJIT.
15+
16+
## Prism
17+
18+
* Memperkenalkan [the Prism parser](https://github.com/ruby/prism) sebagai *default gem*
19+
* Prism adalah sebuah *parser* yang *portable*, *error tolerant*, dan *maintainable recursive descent* untuk Ruby
20+
* Prism siap digunakan di *production* dan aktif dirawat, Anda dapat menggunakannya sebagai pengganti Ripper
21+
* Ada [extensive documentation](https://ruby.github.io/prism/) untuk menggunakan Prism
22+
* Prism adalah sebuah pustaka bahasa C yang digunakan secara internal oleh CRuby dan sebuah Ruby *gem* yang digunakan untuk mem-*parse* kode Ruby
23+
* Beberapa *method* penting pada Prism API:
24+
* `Prism.parse(source)` yang mengembalikan AST sebagai bagian dari ParseResult
25+
* `Prism.dump(source)` yang mengembalikan *serialized* AST sebagai sebuah String
26+
* `Prism.parse_comments(source)` yang mengembalikan komentar pada kode
27+
* Anda dapat membuat *pull request* atau melaporkan isu secara langsung pada [the Prism repository](https://github.com/ruby/prism) jika Anda tertarik untuk berkontribusi
28+
29+
## Menggunakan Lrama ketimbang Bison
30+
31+
* Mengganti Bison dengan [Lrama LALR parser generator](https://github.com/yui-knk/lrama) [Feature #19637](https://bugs.ruby-lang.org/issues/19637)
32+
* Jika Anda tertarik, silakan lihat [The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html)
33+
* Internal *parser* dari Lrama digantikan dengan LR yang dihasilkan oleh Racc untuk *maintainability*
34+
* *Parameterizing Rule* `(?, *, +)` didukung, ini akan digunakan di Ruby parse.y
35+
36+
## RJIT
37+
38+
* Memperkenalkan sebuah *pure-Ruby* JIT *compiler* dan menggantikan MJIT.
39+
* RJIT hanya mendukung arsitektur x86-64 pada *platform Unix*.
40+
* Berbeda dengan MJIT, RJIT tidak memerlukan sebuah *compiler* C saat *runtime*.
41+
* RJIT ada hanya untuk tujuan eksperimen.
42+
* Anda seharusnya tetap menggunakan YJIT pada *production*.
43+
* Jika Anda tertarik untuk mengembangkan JIT pada Ruby, silakan cek [k0kubun's presentation on Day 3 of RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3).
44+
45+
## YJIT
46+
47+
* Peningkatan performa yang signifikan dibanding Ruby 3.2
48+
* Dukungan *splat* dan *rest argument* telah ditingkatkan.
49+
* *Register* dialokasikan untuk operasi *stack* dari *virtual machine*.
50+
* Pemanggilan dengan *optional argument* dikompilasi.
51+
* *Exception handler* juga dikompilasi.
52+
* *Instant variable* tidak lagi keluar ke *intepreter* dengan *Object Shapes*
53+
yang sangat besar.
54+
* *Call type* yang tidak didukung tidak lagi keluar ke *interpreter*.
55+
* `Integer#!=`, `String#!=`, `Kernel#block_given?`, `Kernel#is_a?`,
56+
`Kernel#instance_of?`, `Module#===` dioptimisasi.
57+
* Sekarang 3x lebih cepat dibanding *interpreter* pada optcarrot!
58+
* Peningkatan penggunakan *memory* secara signifikan
59+
* *Metadata* dari kode yang dikompilasi menggunakan *memory* lebih sedikit.
60+
* Peningkatan *code generation* pada ARM64
61+
* Kecepatan kompilasi sedikit lebih cepat dibanding Ruby 3.2
62+
* Menambahkan `RubyVM::YJIT.enable` untuk mengaktifkan YJIT saat *run-time*
63+
* Anda dapat menjalankan YJIT tanpa memodifikasi argumen *command-line* atau *environment variable*
64+
* Ini dapat digunakan untuk mengaktifkan YJIT saat aplikasi Anda selesai *booting*.
65+
`--yjit-disable` dapat digunakan jika Anda tidak ingin mengaktifkan YJIT
66+
ketika aplikasi *booting*.
67+
* Opsi untuk menonaktifkan kode GC dan memperlakukan `--yjit-exec-mem-size` sebagai sebuah batas keras
68+
* Dapat menghasilkan perilaku *copy-on-write* lebih baik pada *server* yang menggunakan unicorn dan *forking*
69+
* `ratio_in_yjit` yang dihasilkan oleh `--yjit-stats` sekarang tersedia pada
70+
rilis *build*, data khusus atau dev *build* tidak lagi diperlukan.
71+
* Opsi *exit tracing* sekarang mendukung *sampling*
72+
* `--trace-exits-sample-rate=N`
73+
* `--yjit-perf` ditambahkan untuk memfasilitasi *profiling* dengan Linux perf.
74+
* Pengujian lebih saksama dan perbaikan beberapa *bug*
75+
76+
### M:N thread scheduler
77+
78+
* M:N *thread scheduler* diperkenalkan. [[Feature #19842]](https://bugs.ruby-lang.org/issues/19842)
79+
* M Ruby *thread* diatur oleh N *native thread* (OS *thread*) sehingga pembuatan *thread* dan
80+
manajemen berkurang.
81+
* Ini dapat merusak kompatibilitas dengan C-*extension* sehingga M:N *thread* dinonaktifkan
82+
pada *main* dari Ractor secara *default*.
83+
* *Environment variable* `RUBY_MN_THREADS=1` mengaktifkan M:N *thread* pada *main* dari Ractor.
84+
* M:N *thread* diaktifkan pada selain *main* dari Ractor.
85+
* *Environment variable* `RUBY_MAX_CPU=n` menetapkan jumlah maksimum dari `N` (jumlah maksimum dari *native thread*). Nilai *default* adalah 8.
86+
* Karena hanya ada satu Ruby *thread* untuk setiap Ractor yang dapat berjalan bersamaan,
87+
jumlah *native thread* yang digunakan, yang mana lebih kecil dari jumlah yang dispesifikasikan pada
88+
`RUBY_MAX_CPU` dan jumlah dari Ractor yang sedang berjalan. Sehingga, aplikasi Ractor tunggal (mayoritas aplikasi)
89+
akan menggunakan satu *native thread*.
90+
* Untuk mendukung operasi *blocking*, lebih dari `N` *native thread* dapat digunakan.
91+
92+
## Fitur Penting Lainnya
93+
94+
95+
96+
### Bahasa
97+
98+
99+
100+
## Perbaikan performa
101+
102+
* `defined?(@ivar)` dioptimisasi dengan *Object Shapes*.
103+
* *Name resolution* seperti `Socket.getaddrinfo` sekarang dapat diinterupsi (pada *environment* di mana pthread tersedia). [Feature #19965](https://bugs.ruby-lang.org/issues/19965)
104+
* Untuk tujuan ini, sebuah pthread sekarang dibuat setiap kali ada pemanggilan getaddrinfo atau getnameinfo.
105+
Ini menimbulkan *overhead* pada *name resolution* (sekitar 2.5x pada eksperimen kami).
106+
Kami tidak mengharapkan *overhead* menjadi sebuah masalah pada kebanyakan aplikasi, namun jika Anda menemui atau
107+
melihat hasil yang tidak diharapkan karena perubahan tersebut, mohon laporkan.
108+
* *Environment variable* `RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO` telah ditambahkan. [Feature #19571](https://bugs.ruby-lang.org/issues/19571)
109+
* *Children* dari *object* lama tidak lagi dipromosikan ke generasi lama pada *garbage collector*. [Feature #19678](https://bugs.ruby-lang.org/issues/19678)
110+
* Dukungan untuk *weak reference* telah ditambahkan pada *garbage collector*. [Feature #19783](https://bugs.ruby-lang.org/issues/19783)
111+
112+
## Perubahan penting lainnya sejak 3.2
113+
114+
### IRB
115+
116+
IRB mendapatkan beberapa peningkatan berikut, namun tidak terbatas pada:
117+
118+
- Integrasi `irb:rdbg` yang menyediakan pengalaman *deugging* setara dengan `pry-byebug` ([doc](https://github.com/ruby/irb#debugging-with-irb)).
119+
- Dukungan *pager* untuk perintah, seperti `ls`, `show_source`, dan `show_cmds`.
120+
- Menyediakan informasi yang lebih akurat dan membantu dengan perintah `ls` dan `show_source`.
121+
- Eksperimen *autocompletion* menggunakan *type analysis* ([doc](https://github.com/ruby/irb#type-based-completion)).
122+
- Sekarang memungkinkan untuk mengubah warna dan gaya *font* pada *completion dialog* dengan mengenalkan *class* Reline::Face ([doc](https://github.com/ruby/ruby/blob/master/doc/reline/face.md))
123+
124+
Sebagai tambahan, IRB telah menjalani *refactoring* yang ekstensif dan menerima
125+
perbaikan *bug* untuk memfasilitasi peningkatan ke depan dengan lebih mudah.
126+
127+
## Isu kompatibilitas
128+
129+
Catatan: Tidak termasuk perbaikan *bug* dari fitur.
130+
131+
### Constant terhapus
132+
133+
Berikut ini adalah *constant* yang telah dihapus.
134+
135+
136+
137+
### Method terhapus
138+
139+
Berikut ini adalah *method* yang telah dihapus.
140+
141+
### Environment variable terhapus
142+
143+
Berikut adalah *environment variable* yang telah dihapus.
144+
145+
* *Environment variable* `RUBY_GC_HEAP_INIT_SLOTS` tidak digunakan lagi. Mohon gunakan `RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS`. [Feature #19785](https://bugs.ruby-lang.org/issues/19785)
146+
147+
## Isu kompatibilitas Stdlib
148+
149+
### `ext/readline` dipensiunkan
150+
151+
* Kami memiliki `reline` yang merupakan implementasi Ruby murni dan kompatibel
152+
dengan `ext/readline` API. Kami bergantung pada `reline` di masa depan. Jika
153+
Anda perlu untuk menggunakan `ext/readline`, Anda dapat memasang `ext/readline`
154+
melalui rubygems.org dengan `gem install readline-ext`.
155+
* Kami tidak lagi memasang pustaka, seperti `libreadline` atau `libedit`.
156+
157+
## Pembaruan C API
158+
159+
### C API diperbarui
160+
161+
Berikut adalah API yang telah diperbarui.
162+
163+
164+
165+
### C API terhapus
166+
167+
Berikut adalah API yang telah dihapus.
168+
169+
170+
171+
## Pembaruan pustaka standar
172+
173+
RubyGems dan Bundler memperingatkan jika pengguna membutuhkan *gem* yang dijadwalkan
174+
akan menjadi *bundled gem* pada Ruby versi berikutnya.
175+
176+
Pustaka yang ditargetkan:
177+
* abbrev
178+
* base64
179+
* bigdecimal
180+
* csv
181+
* drb
182+
* getoptlong
183+
* mutex_m
184+
* nkf
185+
* observer
186+
* racc
187+
* resolv-replace
188+
* rinda
189+
* syslog
190+
191+
Berikut adalah *default gem* yang telah ditambahkan.
192+
193+
* prism 0.15.1
194+
195+
Berikut adalah *default gem* yang telah diperbarui.
196+
197+
* RubyGems 3.5.0.dev
198+
* base64 0.2.0
199+
* benchmark 0.3.0
200+
* bigdecimal 3.1.5
201+
* bundler 2.5.0.dev
202+
* cgi 0.4.0
203+
* csv 3.2.8
204+
* date 3.3.4
205+
* delegate 0.3.1
206+
* drb 2.2.0
207+
* english 0.8.0
208+
* erb 4.0.3
209+
* etc 1.4.3.dev.1
210+
* fcntl 1.1.0
211+
* fiddle 1.1.2
212+
* fileutils 1.7.2
213+
* find 0.2.0
214+
* getoptlong 0.2.1
215+
* io-console 0.6.1.dev
216+
* irb 1.8.3
217+
* logger 1.6.0
218+
* mutex_m 0.2.0
219+
* net-http 0.4.0
220+
* net-protocol 0.2.2
221+
* nkf 0.1.3
222+
* observer 0.1.2
223+
* open-uri 0.4.0
224+
* open3 0.2.0
225+
* openssl 3.2.0
226+
* optparse 0.4.0
227+
* ostruct 0.6.0
228+
* pathname 0.3.0
229+
* pp 0.5.0
230+
* prettyprint 0.2.0
231+
* pstore 0.1.3
232+
* psych 5.1.1.1
233+
* rdoc 6.6.0
234+
* reline 0.3.9
235+
* rinda 0.2.0
236+
* securerandom 0.3.0
237+
* shellwords 0.2.0
238+
* singleton 0.2.0
239+
* stringio 3.0.9
240+
* strscan 3.0.7
241+
* syntax_suggest 1.1.0
242+
* tempfile 0.2.0
243+
* time 0.3.0
244+
* timeout 0.4.1
245+
* tmpdir 0.2.0
246+
* tsort 0.2.0
247+
* un 0.3.0
248+
* uri 0.13.0
249+
* weakref 0.1.3
250+
* win32ole 1.8.10
251+
* yaml 0.3.0
252+
* zlib 3.1.0
253+
254+
Berikut adalah *bundled gem* yang dipromosikan dari *default gem*.
255+
256+
* racc 1.7.3
257+
258+
Berikut adalah *bundled gem* yang telah diperbarui.
259+
260+
* minitest 5.20.0
261+
* rake 13.1.0
262+
* test-unit 3.6.1
263+
* rexml 3.2.6
264+
* rss 0.3.0
265+
* net-imap 0.4.4
266+
* net-smtp 0.4.0
267+
* rbs 3.2.2
268+
* typeprof 0.21.8
269+
* debug 1.8.0
270+
271+
Lihat rilis GitHub, seperti [Logger](https://github.com/ruby/logger/releases)
272+
atau *changelog* untuk detail dari *default gem* atau *bundled gem*.
273+
274+
Lihat [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)
275+
atau [commit logs](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }})
276+
untuk lebih detail.
277+
278+
Dengan perubahan tersebut, [{{ release.stats.files_changed }} berkas berubah, {{ release.stats.insertions }} sisipan(+), {{ release.stats.deletions }} terhapus(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket)
279+
sejak Ruby 3.2.0!
280+
281+
## Unduh
282+
283+
* <{{ release.url.gz }}>
284+
285+
SIZE: {{ release.size.gz }}
286+
SHA1: {{ release.sha1.gz }}
287+
SHA256: {{ release.sha256.gz }}
288+
SHA512: {{ release.sha512.gz }}
289+
290+
* <{{ release.url.xz }}>
291+
292+
SIZE: {{ release.size.xz }}
293+
SHA1: {{ release.sha1.xz }}
294+
SHA256: {{ release.sha256.xz }}
295+
SHA512: {{ release.sha512.xz }}
296+
297+
* <{{ release.url.zip }}>
298+
299+
SIZE: {{ release.size.zip }}
300+
SHA1: {{ release.sha1.zip }}
301+
SHA256: {{ release.sha256.zip }}
302+
SHA512: {{ release.sha512.zip }}
303+
304+
## Apa itu Ruby
305+
306+
Ruby pertama kali dikembangkan oleh Matz (Yukihiro Matsumoto) pada 1993
307+
dan sekarang dikembangkan sebagai *Open Source*. Ruby berjalan pada berbagai
308+
*platform* dan digunakan di seluruh dunia, khususnya pengembangan *web*.

0 commit comments

Comments
 (0)