Skip to content

Commit 0678a97

Browse files
committed
Translate Ruby 3.1.0 released news post (id)
1 parent 98b95f5 commit 0678a97

File tree

1 file changed

+305
-0
lines changed

1 file changed

+305
-0
lines changed
Lines changed: 305 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,305 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 3.1.0 Dirilis"
4+
author: "naruse"
5+
translator: "meisyal"
6+
date: 2021-12-25 00:00:00 +0000
7+
lang: id
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.1.0" | first %}
11+
12+
Kami dengan senang hati mengumumkan rilis dari Ruby {{ release.version }}.
13+
Ruby 3.1 menjaga kompatibilitas dengan Ruby 3.0 dan menambahkan banyak fitur.
14+
15+
## YJIT: Compiler JIT eksperimental baru
16+
17+
Ruby 3.1 menggabungkan YJIT, sebuah *compiler* JIT baru yang dikembangkan oleh
18+
Shopify.
19+
20+
Sejak [Ruby 2.6 mengenalkan MJIT pada 2018](https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-released/),
21+
kinerjanya sangat meningkat dan akhirnya
22+
[kami mecapai Ruby3x3 tahun lalu](https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/).
23+
Meskipun *Optcarrot* telah menunjukkan peningkatan luar biasa, JIT belum
24+
memberikan manfaat untuk aplikasi dunia nyata.
25+
26+
Baru-baru ini Shopify berkontribusi banyak memperbaiki Ruby dengan meningkatkan
27+
kinerja aplikasi *Rails* mereka. YJIT adalah sebuah kontribusi penting
28+
dan bertujuan untuk memperbaiki kinerja dari aplikasi *Rails*.
29+
30+
Walaupun MJIT adalah sebuah *method-based compiler* JIT dan menggunakan sebuah
31+
*compiler* C eksternal, YJIT menggunakan *Basic Block Versioning* dan memasukkan
32+
*compiler* JIT ke dalamnya. Dengan *Lazy Basic Block Versioning* (LBBV),
33+
pertama ini akan meng-*compile* awal dari sebuah *method* dan secara bertahap
34+
meng-*compile* sisanya ketika *argument types* dan variabel ditentukan secara
35+
dinamis. Lihat
36+
[YJIT: a basic block versioning JIT compiler for CRuby](https://dl.acm.org/doi/10.1145/3486606.3486781)
37+
untuk pengenalan.
38+
39+
Dengan teknologi ini, YJIT meraih waktu *warmup* cepat dan peningkatan kinerja
40+
pada kebanyakan aplikasi dunia nyata hingga 22% pada *railsbench*
41+
dan 39% pada *liquid-render*.
42+
43+
YJIT merupakan sebuah fitur yang masih eksperimental dan dinonaktifkan secara
44+
*default*. Jika Anda ingin menggunakannya, tetapkan `--yjit` pada
45+
opsi *command-line*. Fitur ini terbatas pada *Unix-like platform* dengan
46+
arsitektur x86-64 saat ini.
47+
48+
* <https://bugs.ruby-lang.org/issues/18229>
49+
* <https://shopify.engineering/yjit-just-in-time-compiler-cruby>
50+
* <https://www.youtube.com/watch?v=PBVLf3yfMs8>
51+
52+
## debug gem: Sebuah debugger baru
53+
54+
Sebuah *debugger* yang telah ditulis ulang dengan lengkap
55+
[debug.gem](https://github.com/ruby/debug) di-*bundle* dengan Ruby. *debug.gem*
56+
memiliki fitur-fitur berikut:
57+
58+
* Meningkatkan kinerja *debugging* (ini tidak memperlambat aplikasi meskipun dengan *debugger*).
59+
* Mendukung *remote debugging*.
60+
* Mendukung *rich debugging frontend* (*VS Code* dan *Chrome browser* yang didukung saat ini).
61+
* Mendukung *multi-process/multi-thread debugging*.
62+
* *Colorful* REPL.
63+
* dan fitur bermanfaat lainnya, seperti *record* & *replay*, *tracing*, dan sebagainya.
64+
65+
<video autoplay="autoplay" controls="controls" muted="muted" width="764" height="510" poster="https://cache.ruby-lang.org/pub/media/ruby310_debug_demo.jpg">
66+
<source src="https://cache.ruby-lang.org/pub/media/ruby310_debug_demo.mp4" type="video/mp4">
67+
</video>
68+
69+
Ruby telah mem-*bundle* *lib/debug.rb*, tetapi pustaka ini tidak dipelihara dengan
70+
baik karena memiliki masalah kinerja dan fitur. *debug.gem* menggantikan
71+
*lib/debug.rb* secara keseluruhan.
72+
73+
## error_highlight: Lokasi fine-grained error pada backtrace
74+
75+
Sebuah *built-in gem*, *error_highlight*, diperkenalkan. *Gem* ini memberikan
76+
lokasi *fine-grained error* pada *backtrace*:
77+
78+
```
79+
$ ruby test.rb
80+
test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError)
81+
82+
1.time {}
83+
^^^^^
84+
Did you mean? times
85+
```
86+
87+
Saat ini, hanya `NameError` yang didukung.
88+
89+
*Gem* ini diaktifkan secara *default*. Anda dapat menonaktikannya dengan
90+
menggunakan opsi *command-line* `--disable-error_highlight`.
91+
Lihat [repositori](https://github.com/ruby/error_highlight) untuk detail.
92+
93+
## IRB Autocomplete dan Documentation Display
94+
95+
IRB sekarang memiliki sebuah fitur *autocomplete* di mana Anda dapat mengetik
96+
kode dan dialog kandidat *autocomplete* akan muncul. Anda bisa menggunakan
97+
*Tab* dan *Shift+Tab* untuk memilih kandidat ke atas dan ke bawah.
98+
99+
Jika dokumentasi terpasang ketika Anda memilih sebuah kandidat *autocomplete*,
100+
sebuah dialog akan muncul disamping dialog kandidat *autocomplete*, menampilkan
101+
bagian dari dokumentasi. Anda dapat membaca dokumentasi sepenuhnya dengan
102+
menekan *Alt+d*.
103+
104+
<video autoplay="autoplay" controls="controls" muted="muted" width="764" height="510" poster="https://cache.ruby-lang.org/pub/media/ruby310_irb_dialog.png">
105+
<source src="https://cache.ruby-lang.org/pub/media/ruby310_irb_dialog.mp4" type="video/mp4">
106+
</video>
107+
108+
## Fitur penting lainnya
109+
110+
### Bahasa
111+
112+
* Nilai pada literal *Hash* dan *keyword argument* dapat diabaikan. [[Feature #14579]](https://bugs.ruby-lang.org/issues/14579)
113+
* `{x:, y:}` adalah sebuah *syntax sugar* dari `{x: x, y: y}`.
114+
* `foo(x:, y:)` adalah sebuah *syntax sugar* dari `foo(x: x, y: y)`.
115+
116+
* *Pin operator* (`^`) pada *pattern matching* sekarang mengambil sebuah *expression*. [[Feature #17411]](https://bugs.ruby-lang.org/issues/17411)
117+
118+
```ruby
119+
Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a
120+
#=> [[3, 5], [5, 7], [11, 13]]
121+
```
122+
123+
* Tanda kurung dapat diabaikan pada *one-line pattern matching*. [[Feature #16182]](https://bugs.ruby-lang.org/issues/16182)
124+
125+
```ruby
126+
[0, 1] => _, x
127+
{y: 2} => y:
128+
x #=> 1
129+
y #=> 2
130+
```
131+
132+
### RBS
133+
134+
RBS adalah sebuah bahasa untuk mendeskripsikan struktur dari program Ruby.
135+
Lihat [repositori](https://github.com/ruby/rbs) untuk detail.
136+
137+
Perubahan sejak Ruby 3.0.0:
138+
139+
* Parameter *generic type* dapat dibatasi. ([PR](https://github.com/ruby/rbs/pull/844))
140+
* Alias pada *generic type* telah didukung. ([PR](https://github.com/ruby/rbs/pull/823))
141+
* `rbs collection` diperkenalkan untuk mengatur *gem* dari RBS. ([doc](https://github.com/ruby/rbs/blob/master/docs/collection.md))
142+
* Banyak *signature* pada pustaka *built-in* dan standar ditambahkan/diperbarui.
143+
* Selain itu, memuat banyak perbaikan *bug* dan peningkatan kinerja.
144+
145+
Lihat [RBS changelog](https://github.com/ruby/rbs/blob/master/CHANGELOG.md)
146+
untuk lebih detail.
147+
148+
### TypeProf
149+
150+
*TypeProf* adalah sebuah *static type analyzer* untuk Ruby.
151+
*TypeProf* menghasilkan sebuah prototipe RBS dari kode Ruby yang
152+
*non-type-annotated*.
153+
Lihat [dokumen](https://github.com/ruby/typeprof/blob/master/doc/doc.md)
154+
untuk detail.
155+
156+
Perubahan utama sejak Ruby 3.0.0 adalah sebuah dukungan IDE eksperimental yang
157+
dikenal dengan "TypeProf for IDE".
158+
159+
![Demo of TypeProf for IDE](https://cache.ruby-lang.org/pub/media/ruby310_typeprof_ide_demo.png)
160+
161+
*VS Code extension* menampilkan sebuah perkiraan (atau secara langsung tertulis
162+
pada sebuah berkas RBS) *method signature* di atas setiap definisi *method*,
163+
menggarisbawahi kode yang mungkin menyebabkan *name error* atau *type error*
164+
dengan garis merah, dan melengkapi nama *method* (seperti menampilkan kandidat
165+
*method*).
166+
Lihat [dokumen](https://github.com/ruby/typeprof/blob/master/doc/ide.md)
167+
untuk detail.
168+
169+
Rilis ini juga berisi banyak perbaikan *bug* dan peningkatan kinerja.
170+
171+
## Peningkatan kinerja
172+
173+
* MJIT
174+
* Untuk beban kerja seperti *Rails*, *default* `--jit-max-cache` diubah dari
175+
100 menjadi 10000. *Compiler* JIT tidak lagi mengabaikan *compilation*
176+
dari *method* yang memiliki panjang lebih dari 1000 instruksi.
177+
* Untuk mendukung *Zeitwerk* dari *Rails*, *JIT-ed code* tidak lagi dibatalkan
178+
ketika sebuah *TracePoint* untuk *class event* diaktifkan.
179+
180+
## Perubahan penting lainnya sejak 3.0
181+
182+
* *One-line pattern matching*, seperti `ary => [x, y, z]` tidak lagi eksperimental.
183+
* *Multiple assignment evaluation order* telah diubah sedikit. [[Bug #4443]](https://bugs.ruby-lang.org/issues/4443)
184+
* `foo[0], bar[0] = baz, qux` sebelumnya diproses dengan urutan `baz`, `qux`,
185+
`foo`, dan kemudian `bar` pada Ruby 3.0. Pada Ruby 3.1, ini diproses dengan
186+
urutan `foo`, `bar`, `baz`, dan kemudian `qux`.
187+
* *Variable Width Allocation: Strings* (eksperimental) [[Bug #18239]](https://bugs.ruby-lang.org/issues/18239)
188+
189+
* *Psych* 4.0 mengubah `Psych.load` untuk menggunakan `safe_load` secara *default*.
190+
Anda mungkin perlu menggunakan *Psynch* 3.3.2 untuk menggunakan fitur ini.
191+
[[Bug #17866]](https://bugs.ruby-lang.org/issues/17866)
192+
193+
### Pembaruan pustaka standar
194+
195+
* *Default gem* berikut telah diperbarui.
196+
* RubyGems 3.3.3
197+
* base64 0.1.1
198+
* benchmark 0.2.0
199+
* bigdecimal 3.1.1
200+
* bundler 2.3.3
201+
* cgi 0.3.1
202+
* csv 3.2.2
203+
* date 3.2.2
204+
* did_you_mean 1.6.1
205+
* digest 3.1.0
206+
* drb 2.1.0
207+
* erb 2.2.3
208+
* error_highlight 0.3.0
209+
* etc 1.3.0
210+
* fcntl 1.0.1
211+
* fiddle 1.1.0
212+
* fileutils 1.6.0
213+
* find 0.1.1
214+
* io-console 0.5.10
215+
* io-wait 0.2.1
216+
* ipaddr 1.2.3
217+
* irb 1.4.1
218+
* json 2.6.1
219+
* logger 1.5.0
220+
* net-http 0.2.0
221+
* net-protocol 0.1.2
222+
* nkf 0.1.1
223+
* open-uri 0.2.0
224+
* openssl 3.0.0
225+
* optparse 0.2.0
226+
* ostruct 0.5.2
227+
* pathname 0.2.0
228+
* pp 0.3.0
229+
* prettyprint 0.1.1
230+
* psych 4.0.3
231+
* racc 1.6.0
232+
* rdoc 6.4.0
233+
* readline 0.0.3
234+
* readline-ext 0.1.4
235+
* reline 0.3.0
236+
* resolv 0.2.1
237+
* rinda 0.1.1
238+
* ruby2_keywords 0.0.5
239+
* securerandom 0.1.1
240+
* set 1.0.2
241+
* stringio 3.0.1
242+
* strscan 3.0.1
243+
* tempfile 0.1.2
244+
* time 0.2.0
245+
* timeout 0.2.0
246+
* tmpdir 0.1.2
247+
* un 0.2.0
248+
* uri 0.11.0
249+
* yaml 0.2.0
250+
* zlib 2.1.1
251+
* *Bundled gem* berikut telah diperbarui.
252+
* minitest 5.15.0
253+
* power_assert 2.0.1
254+
* rake 13.0.6
255+
* test-unit 3.5.3
256+
* rexml 3.2.5
257+
* rbs 2.0.0
258+
* typeprof 0.21.1
259+
* *Default gem* berikut sekarang adalah *bundled gem*. Anda perlu menambahkan
260+
pustaka berikut pada `Gemfile` yang terdapat pada *bundler environment*.
261+
* net-ftp 0.1.3
262+
* net-imap 0.2.2
263+
* net-pop 0.1.1
264+
* net-smtp 0.3.1
265+
* matrix 0.4.2
266+
* prime 0.1.2
267+
* debug 1.4.0
268+
269+
Lihat [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)
270+
atau [commit logs](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }})
271+
untuk lebih detail.
272+
273+
Dengan perubahan tersebut, [{{ release.stats.files_changed }} berkas berubah, {{ release.stats.insertions }} sisipan(+), {{ release.stats.deletions }} terhapus(-)](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}#file_bucket)
274+
sejak Ruby 3.0.0!
275+
276+
Selamat natal, selamat berlibur, dan nikmati memprogram dengan Ruby 3.1!
277+
278+
## Unduh
279+
280+
* <{{ release.url.gz }}>
281+
282+
SIZE: {{ release.size.gz }}
283+
SHA1: {{ release.sha1.gz }}
284+
SHA256: {{ release.sha256.gz }}
285+
SHA512: {{ release.sha512.gz }}
286+
287+
* <{{ release.url.xz }}>
288+
289+
SIZE: {{ release.size.xz }}
290+
SHA1: {{ release.sha1.xz }}
291+
SHA256: {{ release.sha256.xz }}
292+
SHA512: {{ release.sha512.xz }}
293+
294+
* <{{ release.url.zip }}>
295+
296+
SIZE: {{ release.size.zip }}
297+
SHA1: {{ release.sha1.zip }}
298+
SHA256: {{ release.sha256.zip }}
299+
SHA512: {{ release.sha512.zip }}
300+
301+
## Apa itu Ruby
302+
303+
Ruby pertama kali dikembangkan oleh Matz (Yukihiro Matsumoto) pada tahun 1993
304+
dan sekarang dikembangkan sebagai *Open Source*. Ruby berjalan di berbagai
305+
*platform* dan digunakan di seluruh dunia, khususnya pengembangan *web*.

0 commit comments

Comments
 (0)