|
| 1 | +--- |
| 2 | +layout: news_post |
| 3 | +title: "Ruby 3.1.0 Preview 1 Dirilis" |
| 4 | +author: "naruse" |
| 5 | +translator: "meisyal" |
| 6 | +date: 2021-11-09 00:00:00 +0000 |
| 7 | +lang: id |
| 8 | +--- |
| 9 | + |
| 10 | +{% assign release = site.data.releases | where: "version", "3.1.0-preview1" | first %} |
| 11 | + |
| 12 | +Kami dengan senang hati mengumumkan rilis dari Ruby {{ release.version }}. |
| 13 | + |
| 14 | +## YJIT: Compiler JIT eksperimental baru |
| 15 | + |
| 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/id/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/id/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 dan |
| 28 | +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 |
| 32 | +memasukkan *compiler* JIT ke dalamnya. Dengan *Lazy Basic Block Versioning* |
| 33 | +(LBBV), pertama ini akan meng-*compile* awal dari sebuah *method* dan secara |
| 34 | +bertahap meng-*compile* sisanya ketika *argument types* dan variabel ditentukan |
| 35 | +secara 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 dan 39% pada |
| 41 | +liquid-render. |
| 42 | + |
| 43 | +<!-- 試す人向けのお知らせ --> |
| 44 | + |
| 45 | +YJIT merupakan sebuah fitur yang masih eksperimental dan dinonaktifkan secara |
| 46 | +*default*. Jika Anda ingin menggunakannya, tetapkan `--yjit` pada opsi |
| 47 | +*command-line*. Fitur ini terbatas pada macOS & Linux dengan arsitektur x86-64 |
| 48 | +saat ini. |
| 49 | + |
| 50 | +* <https://bugs.ruby-lang.org/issues/18229> |
| 51 | +* <https://shopify.engineering/yjit-just-in-time-compiler-cruby> |
| 52 | +* <https://www.youtube.com/watch?v=PBVLf3yfMs8> |
| 53 | + |
| 54 | +## debug gem: Sebuah debugger baru |
| 55 | + |
| 56 | +Sebuah *debugger* baru [debug.gem](https://github.com/ruby/debug) di-*bundle* |
| 57 | +dalam Ruby. debug.gem adalah implementasi *debugger* cepat dan menyediakan |
| 58 | +banyak fitur, seperti *remote debugging*, *colorful* REPL, dan integrasi IDE |
| 59 | +(VSCode). *Gem* ini menggantikan pustaka standar `lib/debug.rb`. |
| 60 | + |
| 61 | +## error_highlight: Lokasi fine-grained error pada backtrace |
| 62 | + |
| 63 | +Sebuah *built-in gem*, error_highlight, diperkenalkan. *Gem* ini memberikan |
| 64 | +lokasi *fine-grained error* pada *backtrace*: |
| 65 | + |
| 66 | +``` |
| 67 | +$ ruby test.rb |
| 68 | +test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError) |
| 69 | +
|
| 70 | +1.time {} |
| 71 | + ^^^^^ |
| 72 | +Did you mean? times |
| 73 | +``` |
| 74 | + |
| 75 | +*Gem* ini diaktifkan secara *default*. Anda dapat menonaktikannya dengan |
| 76 | +menggunakan opsi *command-line* `--disable-error_highlight`. Lihat |
| 77 | +[repositori](https://github.com/ruby/error_highlight) untuk detail. |
| 78 | + |
| 79 | +## Perbaikan Irb |
| 80 | + |
| 81 | +Akan dijelaskan pada *preview* berikutnya. |
| 82 | + |
| 83 | +## Fitur penting lainnya |
| 84 | + |
| 85 | +### Bahasa |
| 86 | + |
| 87 | +* Nilai pada literal *Hash* dan *keyword argument* dapat diabaikan. [Feature #14579] |
| 88 | + * `{x:, y:}` adalah sebuah *syntax sugar* dari `{x: x, y: y}`. |
| 89 | + * `foo(x:, y:)` adalah sebuah *syntax sugar* dari `foo(x: x, y: y)`. |
| 90 | + |
| 91 | +* *Pin operator* pada *pattern matching* sekarang mengambil sebuah *expression*. [Feature #17411] |
| 92 | + |
| 93 | +```ruby |
| 94 | +Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a |
| 95 | +#=> [[3, 5], [5, 7], [11, 13]] |
| 96 | +``` |
| 97 | + |
| 98 | + |
| 99 | +### RBS |
| 100 | + |
| 101 | +RBS adalah sebuah bahasa untuk mendeskripsikan struktur dari program Ruby. Lihat |
| 102 | +[repositori](https://github.com/ruby/rbs) untuk detail. |
| 103 | + |
| 104 | +Perubahan sejak Ruby 3.0.0: |
| 105 | + |
| 106 | +* `rbs collection` diperkenalkan untuk mengatur *gem* dari RBS. [dokumen](https://github.com/ruby/rbs/blob/master/docs/collection.md) |
| 107 | +* Banyak *signature* pada pustaka *built-in* dan standar ditambahkan/diperbarui. |
| 108 | +* Selain itu, memuat banyak perbaikan *bug* dan peningkatan kinerja. |
| 109 | + |
| 110 | +Lihat [CHANGELOG.md](https://github.com/ruby/rbs/blob/master/CHANGELOG.md) |
| 111 | +untuk informasi lebih lanjut. |
| 112 | + |
| 113 | +### TypeProf |
| 114 | + |
| 115 | +*TypeProf* adalah sebuah *static type analyzer* untuk Ruby. *TypeProf* |
| 116 | +menghasilkan sebuah prototipe RBS dari kode Ruby yang *non-type-annotated*. |
| 117 | +Lihat [dokumen](https://github.com/ruby/typeprof/blob/master/doc/doc.md) |
| 118 | +untuk detail. |
| 119 | + |
| 120 | +Perubahan sejak Ruby 3.0.0: |
| 121 | + |
| 122 | +* [Dukungan IDE eksperimental](https://github.com/ruby/typeprof/blob/master/doc/ide.md) |
| 123 | + telah diimplementasikan. |
| 124 | +* Banyak perbaikan bug dan peningkatan kinerja. |
| 125 | + |
| 126 | +## Peningkatan kinerja |
| 127 | + |
| 128 | +* MJIT |
| 129 | + * Untuk beban kerja seperti *Rails*, *default* `--jit-max-cache` diubah dari |
| 130 | + 100 menjadi 10000. *Compiler* JIT tidak lagi mengabaikan *compilation* |
| 131 | + dari *method* yang memiliki panjang lebih dari 1000 instruksi. |
| 132 | + * Untuk mendukung *Zeitwerk* dari *Rails*, *JIT-ed code* tidak lagi dibatalkan |
| 133 | + ketika sebuah *TracePoint* untuk *class event* diaktifkan. |
| 134 | + |
| 135 | +## Perubahan penting lainnya sejak 3.0 |
| 136 | + |
| 137 | +* *One-line pattern matching*, seperti `ary => [x, y, z]` tidak lagi eksperimental. |
| 138 | +* *Multiple assignment evaluation order* telah diubah sedikit. [[Bug #4443]](https://bugs.ruby-lang.org/issues/4443) |
| 139 | + * `foo[0], bar[0] = baz, qux` sebelumnya diproses dengan urutan `baz`, `qux` |
| 140 | + `foo`, dan kemudian `bar` pada Ruby 3.0. Pada Ruby 3.1, ini diproses dengan |
| 141 | + urutan `foo`, `bar`, `baz`, dan kemudian `qux`. |
| 142 | +* *Variable Width Allocation: Strings* (eksperimental) [[Bug #18239]](https://bugs.ruby-lang.org/issues/18239) |
| 143 | + |
| 144 | +### Pembaruan pustaka standar |
| 145 | + |
| 146 | +* Beberapa pustaka standar diperbarui. |
| 147 | + * RubyGems |
| 148 | + * Bundler |
| 149 | + * RDoc 6.4.0 |
| 150 | + * ReLine |
| 151 | + * JSON 2.6.0 |
| 152 | + * Psych 4.0.2 |
| 153 | + * FileUtils 1.6.0 |
| 154 | + * Fiddle |
| 155 | + * StringIO 3.0.1 |
| 156 | + * IO::Console 0.5.9 |
| 157 | + * IO::Wait 0.2.0 |
| 158 | + * CSV |
| 159 | + * Etc 1.3.0 |
| 160 | + * Date 3.2.0 |
| 161 | + * Zlib 2.1.1 |
| 162 | + * StringScanner |
| 163 | + * IpAddr |
| 164 | + * Logger 1.4.4 |
| 165 | + * OStruct 0.5.0 |
| 166 | + * Irb |
| 167 | + * Racc 1.6.0 |
| 168 | + * Delegate 0.2.0 |
| 169 | + * Benchmark 0.2.0 |
| 170 | + * CGI 0.3.0 |
| 171 | + * Readline(C-ext) 0.1.3 |
| 172 | + * Timeout 0.2.0 |
| 173 | + * YAML 0.2.0 |
| 174 | + * URI 0.11.0 |
| 175 | + * OpenSSL |
| 176 | + * DidYouMean |
| 177 | + * Weakref 0.1.1 |
| 178 | + * Tempfile 0.1.2 |
| 179 | + * TmpDir 0.1.2 |
| 180 | + * English 0.7.1 |
| 181 | + * Net::Protocol 0.1.2 |
| 182 | + * Net::Http 0.2.0 |
| 183 | + * BigDecimal |
| 184 | + * OptionParser 0.2.0 |
| 185 | + * Set |
| 186 | + * Find 0.1.1 |
| 187 | + * Rinda 0.1.1 |
| 188 | + * Erb |
| 189 | + * NKF 0.1.1 |
| 190 | + * Base64 0.1.1 |
| 191 | + * OpenUri 0.2.0 |
| 192 | + * SecureRandom 0.1.1 |
| 193 | + * Resolv 0.2.1 |
| 194 | + * Resolv::Replace 0.1.0 |
| 195 | + * Time 0.2.0 |
| 196 | + * PP 0.2.1 |
| 197 | + * Prettyprint 0.1.1 |
| 198 | + * Drb 2.1.0 |
| 199 | + * Pathname 0.2.0 |
| 200 | + * Digest 3.1.0.pre2 |
| 201 | + * Un 0.2.0 |
| 202 | +* *Bundled gem* berikut diperbarui. |
| 203 | + * minitest 5.14.4 |
| 204 | + * power_assert 2.0.1 |
| 205 | + * rake 13.0.6 |
| 206 | + * test-unit 3.5.0 |
| 207 | + * rbs 1.6.2 |
| 208 | + * typeprof 0.20.0 |
| 209 | +* *Default gem* berikut sekarang adalah *bundled gem*. |
| 210 | + * net-ftp |
| 211 | + * net-imap |
| 212 | + * net-pop |
| 213 | + * net-smtp |
| 214 | + * matrix |
| 215 | + * prime |
| 216 | + |
| 217 | +Lihat [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) |
| 218 | +atau [commit logs](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}) |
| 219 | +untuk lebih detail. |
| 220 | + |
| 221 | +## Unduh |
| 222 | + |
| 223 | +* <{{ release.url.gz }}> |
| 224 | + |
| 225 | + SIZE: {{ release.size.gz }} |
| 226 | + SHA1: {{ release.sha1.gz }} |
| 227 | + SHA256: {{ release.sha256.gz }} |
| 228 | + SHA512: {{ release.sha512.gz }} |
| 229 | + |
| 230 | +* <{{ release.url.xz }}> |
| 231 | + |
| 232 | + SIZE: {{ release.size.xz }} |
| 233 | + SHA1: {{ release.sha1.xz }} |
| 234 | + SHA256: {{ release.sha256.xz }} |
| 235 | + SHA512: {{ release.sha512.xz }} |
| 236 | + |
| 237 | +* <{{ release.url.zip }}> |
| 238 | + |
| 239 | + SIZE: {{ release.size.zip }} |
| 240 | + SHA1: {{ release.sha1.zip }} |
| 241 | + SHA256: {{ release.sha256.zip }} |
| 242 | + SHA512: {{ release.sha512.zip }} |
| 243 | + |
| 244 | +## Apa itu Ruby |
| 245 | + |
| 246 | +Ruby pertama kali dikembangkan oleh Matz (Yukihiro Matsumoto) pada tahun 1993 |
| 247 | +dan sekarang dikembangkan sebagai *Open Source*. Ruby berjalan di berbagai |
| 248 | +*platform* dan digunakan di seluruh dunia, khususnya pengembangan *web*. |
0 commit comments