|
| 1 | +--- |
| 2 | +layout: news_post |
| 3 | +title: "Ruby 2.6.0-preview3 Rilis" |
| 4 | +author: "naruse" |
| 5 | +translator: "meisyal" |
| 6 | +date: 2018-11-06 00:00:00 +0000 |
| 7 | +lang: id |
| 8 | +--- |
| 9 | + |
| 10 | +Kami dengan senang hati mengumumkan rilis dari Ruby 2.6.0-preview3. |
| 11 | + |
| 12 | +Ruby 2.6.0-preview3 ada *preview* ketiga menuju Ruby 2.6.0. |
| 13 | +preview3 ini dirilis untuk mengetes fitur baru sebelum datang |
| 14 | +*Release Candidate*. |
| 15 | + |
| 16 | +## JIT |
| 17 | + |
| 18 | +Ruby 2.6 memperkenalkan sebuah implementasi awal dari *compiler* JIT |
| 19 | +(Just-in-time). |
| 20 | + |
| 21 | +*Compiler* JIT bertujuan untuk memperbaiki performa dari program Ruby apapun |
| 22 | +yang dieksekusi. Berbeda dengan JIT *compiler* biasanya pada bahasa pemrograman |
| 23 | +lain, *compiler* JIT dari Ruby melakukan kompilasi JIT melalui sebuah jalan |
| 24 | +unik, yang mencetak kode C ke sebuah *disk* dan mengeluarkan proses *compiler* |
| 25 | +C untuk menghasilkan kode asli. |
| 26 | +Lihat juga: [MJIT organization by Vladimir Makarov](https://github.com/vnmakarov/ruby/tree/rtl_mjit_branch#mjit-organization). |
| 27 | + |
| 28 | +Bagaimana cara menggunakan: Tetapkan `--jit` pada *command line* atau `$RUBYOPT` |
| 29 | +*environment variable*. Menetapkan `--jit-verbose=1` memperbolehkan untuk |
| 30 | +mencetak informasi dasar dari kompilasi JIT yang berjalan. Lihat `ruby --help` |
| 31 | +untuk pilihan lainnya. |
| 32 | + |
| 33 | +Tujuan utama dari rilis JIT ini adalah untuk menyediakan sebuah kesempatan untuk |
| 34 | +mengecek jika ini berjalan di *platform* Anda dan menemukan risiko keamanan |
| 35 | +sebelum rilis 2.6. *Compiler* JIT didukung hanya ketika Ruby dibuat oleh GCC, |
| 36 | +Clang, atau Microsoft VC++, yang mana dibutuhkan saat *runtime*. Jika |
| 37 | +sebaliknya, Anda tidak dapat menggunakannya. |
| 38 | + |
| 39 | +Sampai versi 2.6.0-preview3, kami telah meraih 1.7x performa lebih cepat |
| 40 | +dibanding Ruby 2.5 pada CPU-*intensive non-trivial benchmark workload* yang |
| 41 | +dikenal dengan Optcarrot <https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208>. |
| 42 | +Kami akan memperbaiki performa pada *memory-intensive workload* seperti |
| 43 | +aplikasi Rails. |
| 44 | + |
| 45 | +Nantikan era baru dari performa Ruby. |
| 46 | + |
| 47 | +## RubyVM::AST [Eksperimental] |
| 48 | + |
| 49 | +Ruby 2.6 mengenalkan modul `RubyVM::AST`. |
| 50 | + |
| 51 | +Modul ini memiliki *method* `parse` yang mem-*parse string* dari kode Ruby yang |
| 52 | +diberikan dan mengembalikan AST (Abstract Syntax Tree) *node*, dan *method* |
| 53 | +`parse_file` yang mem-*parse* berkas dan mengembalikan AST *node*. |
| 54 | +Kelas `RubyVM::AST::Node` juga mengenalkan Anda agar mendapatkan informasi |
| 55 | +lokasi dan *children node* dari objek `Node`. Fitur ini eksperimental. |
| 56 | +Kesesuaian struktur dari AST *node* tidak dijamin. |
| 57 | + |
| 58 | +## Fitur-fitur Baru |
| 59 | + |
| 60 | +* Menambahkan sebuah alias baru `then` pada `Kernel#yield_self`. [[Fitur #14594]](https://bugs.ruby-lang.org/issues/14594) |
| 61 | + |
| 62 | +* `else` tanpa `rescue` sekarang menyebabkan sebuah *syntax error*. [EKSPERIMENTAL] |
| 63 | + |
| 64 | +* penamaan konstan bisa dimulai dengan sebuah huruf kapital non-ASCII. [[Fitur #13770]](https://bugs.ruby-lang.org/issues/13770) |
| 65 | + |
| 66 | +* endless range [[Fitur #12912]](https://bugs.ruby-lang.org/issues/12912) |
| 67 | + |
| 68 | + Sebuah endless range, `(1..)`, diperkenalkan. Ini berjalan tanpa ada akhirnya. Biasanya digunakan untuk kasus: |
| 69 | + |
| 70 | + ary[1..] # identik dengan ary[1..-1] tanpa magical -1 |
| 71 | + (1..).each {|index| ... } # inifinite loop dari indeks 1 |
| 72 | + ary.zip(1..) {|elem, index| ... } # ary.each.with_index(1) { ... } |
| 73 | + |
| 74 | +* Menambahkan `Binding#source_location`. [[Feature #14230]](https://bugs.ruby-lang.org/issues/14230) |
| 75 | + |
| 76 | + *Method* ini mengembalikan sumber lokasi dari *binding*, sebuah *array* dua |
| 77 | +elemen dari `__FILE__` dan `__LINE__`. Secara tradisi, informasi yang sama |
| 78 | +mungkin dapat diambil dengan `eval("[__FILE__, __LINE__]", binding)`, tetapi |
| 79 | +kami sedang merencanakan untuk mengubah perilaku ini sehingga `Kernel#eval` |
| 80 | +mengabaikan sumber lokasi *binding* [[Bug #4352]](https://bugs.ruby-lang.org/issues/4352). |
| 81 | +Sehingga, pengguna seharusnya menggunakan *method* yang baru diperkenalkan ini |
| 82 | +daripada `Kernel#eval`. |
| 83 | + |
| 84 | +* Menambahkan pilihan `:exception` agar `Kernel#system` mengeluarkan *error* |
| 85 | +daripada mengembalikan `false`. [[Feature #14386]](https://bugs.ruby-lang.org/issues/14386) |
| 86 | + |
| 87 | +## Perbaikan performa |
| 88 | + |
| 89 | +* Mempercepat `Proc#call` karena kami tidak peduli `$SAFE` lagi. |
| 90 | + [[Feature #14318]](https://bugs.ruby-lang.org/issues/14318) |
| 91 | + |
| 92 | + Dengan *benchmark* `lc_fizzbuzz` yang menggunakan `Proc#call` berkali-kali |
| 93 | + kami dapat mengukur x1.4 kemajuan [[Bug #10212]](https://bugs.ruby-lang.org/issues/10212). |
| 94 | + |
| 95 | +* Mempercepat `block.call` di mana `block` diterima parameter *block*. [[Feature #14330]](https://bugs.ruby-lang.org/issues/14330) |
| 96 | + |
| 97 | + Ruby 2.5 memperbaiki performa *block passing*. [[Feature #14045]](https://bugs.ruby-lang.org/issues/14045) |
| 98 | + Selain itu, Ruby 2.6 memperbaiki performa dari pemanggilan *passed block*. |
| 99 | + Dengan mikro *benchmark* kami dapat mengamati x2.6 kemajuan. |
| 100 | + |
| 101 | +* Transient Heap (theap) dikenalkan. [Bug #14858] [Feature #14989] |
| 102 | + theap adalah *heap* yang diatur untuk *short-living memory object* yang |
| 103 | + diarahkan oleh kelas tertentu (Array, Hash, Object, dan Struct). Sebagai |
| 104 | + contoh, membuat objek Hash yang kecil dan *short-living* 2x lebih cepat. |
| 105 | + Dengan rdoc *benchmark*, kami mengamati 6-7% kemajuan. |
| 106 | + |
| 107 | +## Perubahan penting lainnya sejak 2.5 |
| 108 | + |
| 109 | +* `$SAFE` adalah sebuah proses *state* global dan kita dapat mengatur ke `0` lagi. [[Feature #14250]](https://bugs.ruby-lang.org/issues/14250) |
| 110 | + |
| 111 | +* Menempatkan parameter `safe_level` ke `ERB.new` tidak berlaku lagi. Argumen |
| 112 | +`trim_mode` dan `eoutvar` diubah menjadi argumen kata kunci. [[Feature #14256]](https://bugs.ruby-lang.org/issues/14256) |
| 113 | + |
| 114 | +* Menggabungkan RubyGems 3.0.0.beta2. Opsi `--ri` dan `--rdoc` dihapus. Mohon |
| 115 | + gunakan opsi `--document` dan `--no-document`. |
| 116 | + |
| 117 | +* Menggabungkan [Bundler](https://github.com/bundler/bundler) sebagai gem |
| 118 | + *default*. |
| 119 | + |
| 120 | +Lihat [NEWS](https://github.com/ruby/ruby/blob/v2_6_0_preview3/NEWS) |
| 121 | +atau [commit logs](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0_preview3) |
| 122 | +untuk detail. |
| 123 | + |
| 124 | +Dengan perubahan tersebut, |
| 125 | +[6474 berkas berubah, 171888 sisipan(+), 46617 terhapus(-)](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0_preview3) |
| 126 | +sejak Ruby 2.5.0! |
| 127 | + |
| 128 | +Nikmati memprogram dengan Ruby 2.6.0-preview3! |
| 129 | + |
| 130 | +## Unduh |
| 131 | + |
| 132 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.tar.gz> |
| 133 | + |
| 134 | + SIZE: 17071670 bytes |
| 135 | + SHA1: 67836fda11fa91e0b988a6cc07989fbceda025b4 |
| 136 | + SHA256: 60243e3bd9661e37675009ab66ba63beacf5dec748885b9b93916909f965f27a |
| 137 | + SHA512: 877278cd6e9b947f5bb6ed78136efb232dcc9c5c218b7236576171e7c3cd7f6b7d10d07d8402014a14aba1fcd1913a4370f0725c561ead41d8a3fe92029f7f76 |
| 138 | + |
| 139 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.zip> |
| 140 | + |
| 141 | + SIZE: 21537655 bytes |
| 142 | + SHA1: 45f3c90dfffe03b746f21f24152666e361cbb41a |
| 143 | + SHA256: 9152af9e700349dcfa2eec196dd91587d42d70a6837fa2c415ebba1167587be1 |
| 144 | + SHA512: 335de36cf56706326f4acc4bbd35be01e0ac5fff30d0a69b2e1630ba4c78f0e711822d1623d0099a517c824b154917d2f60be192dfb143a422cf1d17b38e1183 |
| 145 | + |
| 146 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.tar.bz2> |
| 147 | + |
| 148 | + SIZE: 14973451 bytes |
| 149 | + SHA1: 5f2df5d8c5a3888ccb915d36a3532ba32cda8791 |
| 150 | + SHA256: 1f09a2ac1ab26721923cbf4b9302a66d36bb302dc45e72112b41d6fccc5b5931 |
| 151 | + SHA512: d1693625723796e8902f3e4c4fae444f2912af9173489f7cf18c99db2a217afc971b082fce7089e39f8edd54d762d2b4e72843c8306ed29b05ccb15ac03dbb5b |
| 152 | + |
| 153 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview3.tar.xz> |
| 154 | + |
| 155 | + SIZE: 12291692 bytes |
| 156 | + SHA1: 7f8216247745215e9645568e7a02140f9a029b31 |
| 157 | + SHA256: 9856d9e0e32df9e5cdf01928eec363d037f1a76dab2abbf828170647beaf64fe |
| 158 | + SHA512: b4d3b17ecf96272c43cd7518c0b54dee63fc1150ad143e1d9c9d708506fe78676c80eb96cc47b8d46d1128bd483a53f16c944963a03d1f99f00131b74714df7b |
0 commit comments