Skip to content

Commit 484d98b

Browse files
committed
Translate Ruby 2.7.0-preview2 released news (id)
1 parent e75a88c commit 484d98b

File tree

1 file changed

+295
-0
lines changed

1 file changed

+295
-0
lines changed
Lines changed: 295 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,295 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 2.7.0-preview2 Dirilis"
4+
author: "naruse"
5+
translator: "meisyal"
6+
date: 2019-10-22 12:00:00 +0000
7+
lang: id
8+
---
9+
10+
Kami dengan senang hati mengumumkan rilis dari Ruby 2.7.0-preview2.
11+
12+
Sebuah versi *preview* dirilis untuk mengumpulkan umpan balik rilis final
13+
yang direncanakan rilis pada bulan Desember. Versi ini memperkenalkan
14+
sejumlah fitur baru dan perbaikan performa, terutama:
15+
16+
* Compaction GC
17+
* Pattern Matching
18+
* REPL improvement
19+
* Separation of positional and keyword arguments
20+
21+
## Compaction GC
22+
23+
Rilis ini memperkenalkan *Compaction* GC yang dapat *defragment* sebuah
24+
*fragmented memory space*.
25+
26+
Beberapa *multi-threaded* dari program Ruby dapat menyebabkan *memory
27+
fragmentation*, menyebabkan penggunaan *memory* tinggi dan penurunan kecepatan.
28+
29+
*Method* `GC.compact` dikenalkan untuk me-*compact heap*. Fungsi ini
30+
me-*compact* objek di dalam *heap* sehingga sedikit *page* yang akan digunakan
31+
dan *heap* bisa jadi lebih CoW bersahabat. [[Feature #15626]](https://bugs.ruby-lang.org/issues/15626)
32+
33+
## Pattern Matching [Experimental]
34+
35+
*Pattern matching*, fitur yang banyak digunakan dalam bahasa pemrograman
36+
fungsional, dikenalkan sebagai sebuah fitur eksperimental. [[Feature #14912]](https://bugs.ruby-lang.org/issues/14912)
37+
Ini dapat melewati sebuah objek dan menetapkan nilainya jika cocok dengan
38+
sebuah pola.
39+
40+
```ruby
41+
case JSON.parse('{...}', symbolize_names: true)
42+
in {name: "Alice", children: [{name: "Bob", age: age}]}
43+
p age
44+
...
45+
end
46+
```
47+
48+
Untuk lebih detail, mohon lihat [Pattern matching - New feature in Ruby 2.7](https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7).
49+
50+
## REPL improvement
51+
52+
`irb`, membungkus *interactive development* (REPL; Read-Eval-Print-Loop),
53+
sekarang mendukung suntingan *multi-line*. Ini didukung oleh `reline`,
54+
`readline` yang sesuai dengan implementasi murni dari Ruby. Ini juga
55+
menyediakan integrasi rdoc. Di dalam `irb` Anda dapat menampilkan referensi
56+
sebuah *class*, *module*, atau *method*. [[Feature #14683]](https://bugs.ruby-lang.org/issues/14683), [[Feature #14787]](https://bugs.ruby-lang.org/issues/14787), [[Feature #14918]](https://bugs.ruby-lang.org/issues/14918)
57+
Selain itu, baris kode ditampilkan pada `binding.irb` dan hasil pemeriksaan
58+
objek *core-class* sekarang berwarna.
59+
60+
<video autoplay="autoplay" controls="controls" muted="muted" width="576" height="259">
61+
<source src="https://cache.ruby-lang.org/pub/media/irb_improved_with_key_take2.mp4" type="video/mp4">
62+
</video>
63+
64+
## Separation of positional and keyword arguments
65+
66+
Konversi otomatis dari *keyword argument* dan *positional argument* sudah
67+
usang dan akan dihapus di Ruby 3. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
68+
69+
* Ketika sebuah pemanggilan *method* melewati sebuah *Hash* pada *argument*
70+
terakhir, ketika melewati *keyword* kosong, dan ketika *method* yang
71+
dipanggil menerima *keyword*, sebuah peringatan dikeluarkan. Untuk
72+
melanjutkan sebagai *keyword*, menambahkan sebuah *double splat operator*
73+
untuk menghindari peringatan dan memastikan perilaku yang benar pada Ruby 3.
74+
75+
76+
```ruby
77+
def foo(key: 42); end; foo({key: 42}) # warned
78+
def foo(**kw); end; foo({key: 42}) # warned
79+
def foo(key: 42); end; foo(**{key: 42}) # OK
80+
def foo(**kw); end; foo(**{key: 42}) # OK
81+
```
82+
83+
* Ketika sebuah pemanggilan *method* melewati *keyword* ke sebuah *method*
84+
yang menerima *keyword*, tetapi tidak memenuhi *positional argument* yang
85+
diperlukan, *keyword* akan dianggap sebagai sebuah *required positional
86+
argument* final dan sebuah peringatan dikeluarkan. Melewati *argument*
87+
sebagai sebuah *hash* ketimbang *keyword* untuk menghindari peringatan dan
88+
memastikan perilaku yang benar pada Ruby 3.
89+
90+
```ruby
91+
def foo(h, **kw); end; foo(key: 42) # warned
92+
def foo(h, key: 42); end; foo(key: 42) # warned
93+
def foo(h, **kw); end; foo({key: 42}) # OK
94+
def foo(h, key: 42); end; foo({key: 42}) # OK
95+
```
96+
97+
* Ketika sebuah *method* menerima *keyword* tertentu, tetapi bukan sebuah
98+
*keyword splat* dan sebuah *hash* atau *keyword splat* dilewatkan *method*
99+
yang memasukkan *key* Symbol dan non-Symbol, *hash* akan lanjut dengan
100+
memisahkan dan sebuah peringatan dikeluarkan. Anda akan butuh pemanggilan
101+
kode untuk melewati hash yang terpisah untuk memastikan perilaku yang benar
102+
pada Ruby 3.
103+
104+
```ruby
105+
def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # warned
106+
def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned
107+
def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
108+
```
109+
110+
* Jika sebuah *method* tidak menerima *keyword* dan dipanggil dengan *keyword*,
111+
*keyword* akan dianggap sebagai sebuah *positional hash* tanpa peringatan.
112+
Perilaku ini akan berlanjut pada Ruby 3.
113+
114+
```ruby
115+
def foo(opt={}); end; foo( key: 42 ) # OK
116+
```
117+
118+
* Non-symbol diperbolehkan sebagai sebuah *keyword argument* jika *method*
119+
menerima *arbitrary keyword*. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
120+
121+
```ruby
122+
def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
123+
```
124+
125+
* <code>**nil</code> diperbolehkan pada definisi *method* sebagai penanda
126+
langsung bahwa *method* menerima *keyword* kosong. Memanggil *method*
127+
seperti itu dengan *keyword* akan menyebabkan ArgumentError. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
128+
129+
```ruby
130+
def foo(h, **nil); end; foo(key: 1) # ArgumentError
131+
def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError
132+
def foo(h, **nil); end; foo("str" => 1) # ArgumentError
133+
def foo(h, **nil); end; foo({key: 1}) # OK
134+
def foo(h, **nil); end; foo({"str" => 1}) # OK
135+
```
136+
137+
* Melewatkan sebuah *keyword splat* kosong pada sebuah *method* yang tidak
138+
menerima *keyword* tidak akan lagi melewati sebuah *hash* kosong, kecuali
139+
*hash* kosong dibutuhkan sebagai sebuah *required parameter*, di mana kasus
140+
sebuah peringatan akan dikelurkan. Hilangkan *double splat* untuk melanjutkan
141+
sebuah *positional hash*. [[Feature #14183]](https://bugs.ruby-lang.org/issues/14183)
142+
143+
```ruby
144+
h = {}; def foo(*a) a end; foo(**h) # []
145+
h = {}; def foo(a) a end; foo(**h) # {} and warning
146+
h = {}; def foo(*a) a end; foo(h) # [{}]
147+
h = {}; def foo(a) a end; foo(h) # {}
148+
```
149+
150+
## Fitur Baru Penting Lainnya
151+
152+
* Sebuah *method reference operator*, <code>.:</code>, dikenalkan sebagai
153+
sebuah fitur eksperimental.
154+
[[Feature #12125]](https://bugs.ruby-lang.org/issues/12125),
155+
[[Feature #13581]]( https://bugs.ruby-lang.org/issues/13581)
156+
157+
* *Numbered parameter* sebagai *default block parameter* dikenalkan sebagai
158+
sebuah fitur eksperimental.
159+
[[Feature #4475]](https://bugs.ruby-lang.org/issues/4475)
160+
161+
* Sebuah *beginless range* secara eksperimental dikenalkan. Ini mungkin tidak
162+
berguna seperti *endless range*, tetapi sangat baik untuk penggunan DSL.
163+
[[Feature #14799]](https://bugs.ruby-lang.org/issues/14799)
164+
165+
```ruby
166+
ary[..3] # identical to ary[0..3]
167+
rel.where(sales: ..100)
168+
```
169+
170+
* `Enumerable#tally` ditambahkan. Ini menghitung banyak elemen dari setiap
171+
elemen.
172+
173+
```ruby
174+
["a", "b", "c", "b"].tally
175+
#=> {"a"=>1, "b"=>2, "c"=>1}
176+
```
177+
178+
* Pemanggilan sebuah *private method* pada `self` sekarang diperbolehkan.
179+
[[Feature #11297]](https://bugs.ruby-lang.org/issues/11297)
180+
[[Feature #16123]](https://bugs.ruby-lang.org/issues/16123)
181+
182+
```ruby
183+
def foo
184+
end
185+
private :foo
186+
self.foo
187+
```
188+
189+
* `Enumerator::Lazy#eager` ditambahkan. Ini menghasilkan sebuah *non-lazy
190+
enumerator* dari sebuah *lazy enumerator*.
191+
[[Feature #15901]](https://bugs.ruby-lang.org/issues/15901)
192+
193+
```ruby
194+
a = %w(foo bar baz)
195+
e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager
196+
p e.class #=> Enumerator
197+
p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
198+
```
199+
200+
## Perbaikan performa
201+
202+
* JIT [Eksperimental]
203+
204+
* Kode JIT-*ed* di-*recompile* untuk kode *less-optimized* ketika sebuah
205+
asumsi optimisasi dibatalkan.
206+
207+
* *Method inlining* dilakukan ketika sebuah *method* dianggap murni.
208+
Optimisasi ini masih eksperimental dan banyak *method* dianggap tidak
209+
murni.
210+
211+
* Nilai default dari `--jit-min-calls` diubah dari 5 ke 10,000
212+
213+
* Nilai default dari `--jit-max-cache` diubah dari 1,000 ke 100
214+
215+
* `Symbol#to_s`, `Module#name`, `true.to_s`, `false.to_s`, dan `nil.to_s`
216+
sekarang selalu mengembalikan sebuah *frozen string*. *String* yang
217+
dikembalikan selalu sama untuk sebuah objek. [Eksperimental]
218+
[[Feature #16150]](https://bugs.ruby-lang.org/issues/16150)
219+
220+
* Performa dari `CGI.escapeHTML` ditingkatkan. [GH-2226](https://github.com/ruby/ruby/pull/2226)
221+
222+
## Perubahan penting lainnya sejak 2.6
223+
224+
* Beberapa pustaka standar diperbarui.
225+
* Bundler 2.1.0.pre.1
226+
* RubyGems 3.1.0.pre.1
227+
* CSV 3.1.2 ([NEWS](https://github.com/ruby/csv/blob/v3.1.2/NEWS.md))
228+
* Racc 1.4.15
229+
* REXML 3.2.3 ([NEWS](https://github.com/ruby/rexml/blob/v3.2.3/NEWS.md))
230+
* RSS 0.2.8 ([NEWS](https://github.com/ruby/rss/blob/v0.2.8/NEWS.md))
231+
* StringScanner 1.0.3
232+
* Beberapa pustaka lainnya yang tidak memiliki versi asli juga diperbarui.
233+
234+
* `Proc.new` dan `proc` tanpa *block* dalam sebuah *method* dipanggil dengan
235+
sebuah *block* akan diperingatkan sekarang.
236+
237+
* `lambda` tanpa *block* dalam sebuah *method* dipanggil dengan sebuah
238+
*block errs*.
239+
240+
* Memperbarui versi Unicode dan Emoji dari 11.0.0 ke 12.0.0. [[Feature #15321]](https://bugs.ruby-lang.org/issues/15321)
241+
242+
* Memperbarui versi Unicode ke 12.1.0, menambahkan dukungan U+32FF SQUARE
243+
ERA NAME REIWA. [[Feature #15195]](https://bugs.ruby-lang.org/issues/15195)
244+
245+
* `Date.jisx0301`, `Date#jisx0301`, dan `Date.parse` mendukung *Japanese era*
246+
yang baru. [[Feature #15742]](https://bugs.ruby-lang.org/issues/15742)
247+
248+
* Membutuhkan *compiler* untuk mendukung C99 [[Misc #15347]](https://bugs.ruby-lang.org/issues/15347)
249+
* Detail dialek kami: <https://bugs.ruby-lang.org/projects/ruby-master/wiki/C99>
250+
251+
Lihat [NEWS](https://github.com/ruby/ruby/blob/v2_7_0_preview2/NEWS) atau
252+
[commit logs](https://github.com/ruby/ruby/compare/v2_6_0...v2_7_0_preview2)
253+
untuk lebih detail.
254+
255+
Dengan perubahan tersebut, [3670 berkas berubah, 201242 sisipan(+),
256+
88066 terhapus(-)](https://github.com/ruby/ruby/compare/v2_6_0...v2_7_0_preview2)
257+
sejak Ruby 2.6.0!
258+
259+
Nikmati memprogram dengan Ruby 2.7!
260+
261+
## Unduh
262+
263+
* <https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview2.tar.bz2>
264+
265+
SIZE: 14555229 bytes
266+
SHA1: 7d9eed71115acfc8851747517904c1c6809872a9
267+
SHA256: 417c84346ba84d664a13833c94c6d9f888c89bb9bee9adf469580441eaede30b
268+
SHA512: 7066ececebbbba4b2933ba1a4f70cdef373169910802259a3e52b4fc144ba298f3cffda4be5fe8a7be8ef769ed43076fa046a9ac2c13bb733475b9852112c6f0
269+
270+
* <https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview2.tar.gz>
271+
272+
SIZE: 16622499 bytes
273+
SHA1: 5e998eb37ef54e650c0206184d56f506359d5477
274+
SHA256: bda4b8dc340fad425c8099400fe3ef8e7393837d7e6e1bfae41843d1d938ebc4
275+
SHA512: dbf05d6ddab59062f507342b25b8c21670b02bdd49e77bda947870607f4bf9049e5e7ddfde6bbce2e1749ca92568da9be3e5f30601b1eb450f10d8add952239a
276+
277+
* <https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview2.tar.xz>
278+
279+
SIZE: 11874200 bytes
280+
SHA1: 4356e1726027795a5c6b08572bb37bcb5a8c55d6
281+
SHA256: fa39f088331f6d505154aa9d025aab177fdffedfbbabccd900b8c02e745bc077
282+
SHA512: a057a186d85fcdf123abd69d584ef3adb20ad4397521e14306395d34102c3d818fe2d34a6476db01effcde479da9a77076cbb6d30bca40f1471ce3f5d3a995a9
283+
284+
* <https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0-preview2.zip>
285+
286+
SIZE: 20576618 bytes
287+
SHA1: 891b70ec76e9e776774a49b3ce24832a944422b3
288+
SHA256: 81a240bead4438b064cb4cde562b483b82ec8e414bac057a6df43df5a247545c
289+
SHA512: 1a8d4503374d31abf43182e2af6902ea6e5295f55d539415c8268b1d6a0fa83a975648c225ae986e687d5283dc2d180cf1e608841485506e4b0ac5efc154949a
290+
291+
## Apa itu Ruby
292+
293+
Ruby pertama kali dikembangkan oleh Matz (Yukihiro Matsumoto) pada 1993
294+
dan sekarang dikembangkan sebagai *open source*. Ruby berjalan di berbagai
295+
jenis *platform* dan digunakan di seluruh dunia khususnya pengembangan *web*.

0 commit comments

Comments
 (0)