Ditulis oleh naruse tanggal 2018-02-24
Diterjemahkan oleh meisyal
Kami dengan senang hati mengumumkan rilis dari Ruby 2.6.0-preview1.
Ruby 2.6.0-preview1 adalah preview pertama menuju Ruby 2.6.0. preview1 ini dirilis lebih awal daripada biasanya karena rilis ini mengandung sebuah fitur baru yang penting, JIT.
JIT
Ruby 2.6 memperkenalkan sebuah implementasi awal dari compiler JIT (Just-in-time).
Compiler JIT bertujuan untuk memperbaiki performa dari program Ruby apapun yang dieksekusi. Berbeda dengan JIT compiler biasanya pada bahasa pemrograman lain, compiler JIT dari Ruby melakukan kompilasi JIT melalui sebuah jalan unik, yang mencetak kode C ke sebuah disk dan mengeluarkan proses compiler C untuk menghasilkan kode asli. Lihat juga: MJIT organization by Vladimir Makarov.
Bagaimana cara menggunakan: Tetapkan --jit
pada command line atau $RUBYOPT
environment variable. Menetapkan --jit-verbose=1
memperbolehkan untuk
mencetak informasi dasar dari kompilasi JIT yang berjalan. Lihat ruby --help
untuk pilihan lainnya.
Tujuan utama dari rilis JIT ini adalah untuk menyediakan sebuah kesempatan untuk mengecek jika ini berjalan di platform Anda dan menemukan risiko keamanan sebelum rilis 2.6. Saat ini, compiler JIT didukung hanya ketika Ruby dibuat oleh gcc atau clang dan compiler tersedia saat runtime. Jika sebaliknya, Anda tidak dapat menggunakannya.
Sampai versi 2.6.0-preview1, kami hanya menyiapkan infrastruktur untuk JIT dan sangat sedikit optimasi yang diimplementasikan. Anda dapat mengukur beberapa potensi perbaikan ke dalam mikro benchmark melalui rilis ini, tetapi ini tidak siap untuk proses final benchmark performa dari compiler JIT-nya Ruby, khususnya untuk program yang besar seperti aplikasi Rail.
Kami akan mengimplementasikan method inlining di compiler JIT, yang mana diharapkan meningkatkan performa Ruby secara signifikan.
Begitu juga, kami sedang merencanakan untuk menambah platform yang didukung, dan rencana selanjutnya adalah mendukung Visual Studio.
Nantikan era baru dari performa Ruby.
Fitur Baru
- Menambahkan
Random.bytes
. [Feature #4938] -
Menambahkan
Binding#source_location
. [Feature #14230]Method ini mengembalikan lokasi sumber binding, sebuah array dua elemen dari
__FILE__
dan__LINE__
. Secara tradisional, informasi yang sama mungkin dapat diambil denganeval("[__FILE__, __LINE__]")
, tetapi kami sedang merencanakan untuk mengubah perilaku ini sehinggaKernel#eval
mengabaikan sumber lokasibinding
[Bug #4352]. Sehingga, pengguna menggunakan method baru yang dikenalkan daripadaKernel#eval
. - Menambahkan opsi
:exception
agar membiarkanKernel.#system
menampilkan error daripada mengembalikanfalse
. [Feature #14386]
Perbaikan performa
-
Mempercepat
Proc#call
karena kami tidak peduli dengan$SAFE
lagi. [Feature #14318]Dengan benchmark
lc_fizzbuzz
yang menggunakanProc#call
berkali-kali, kita dapat mengukur x1.4 kemajuan [Bug #10212]. -
Mempercepat
block.call
di manablock
diterima parameter block. [Feature #14330]Ruby 2.5 memperbaiki performa block passing. [Feature #14045] Selain itu, Ruby 2.6 memperbaiki performa dari pemanggilan passed block. Dengan mikro benchmark kita dapat mengamati 2.6x kemajuan.
Perubahan penting lainnya sejak 2.5
-
$SAFE
adala sebuah proses state global dan kita dapat mengatur ke0
lagi. [Feature #14250] -
Menempatkan parameter
safe_level
keERB.new
tidak berlaku lagi. Argumentrim_mode
daneoutvar
diubah menjadi argumen kata kunci. [Feature #14256] -
Menggabungkan RubyGems 2.7.6
Lihat NEWS atau commit logs untuk detail.
Dengan perubahan tersebut, 1115 berkas berubah, 23023 sisipan(+), 14748 terhapus(-) sejak Ruby 2.5.0!
Hari ini, 24 Februari, adalah ulang tahun Ruby ke-25. Selamat ulang tahun Ruby, dan nikmati memprogram dengan Ruby 2.6.0-preview1!
Unduh
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview1.tar.gz
SIZE: 16082501 bytes SHA1: 94b4a2f5f992dc9855364284e9c64316bf129c90 SHA256: 2023c42676d9237481e1a97157d5e2ecc10db5e320d5b9cf872ec1d293265d61 SHA512: 004696c4f087333ba7cb2285418dcce70f399966ae8fed817aab9759fd2d75beb088c4aeb294fcd4260112e8422f490cd4dbdfce402d73f96bb679b8bb3e1607
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview1.zip
SIZE: 19807007 bytes SHA1: 24d76f67bf913348eca783a2ecf6f3faf37299ae SHA256: 6c883927e80430cf07f2d90728d6c2c71164223f378a48ebf964d3b66319f623 SHA512: 1e7f318cec1b7875fd9891df671078de7585b556695a2a85708483ddcacfd6e0b63b70ec2535e92ff981b4f72063721ed552df49688e066666fcd7ae520ae667
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview1.tar.bz2
SIZE: 14104578 bytes SHA1: 9f0fb79643a4673a839b0c8496eccc6e1dbd022d SHA256: 8bd6c373df6ee009441270a8b4f86413d101b8f88e8051c55ef62abffadce462 SHA512: d9cb270529a97670d54f43a0236fab072714e715c39277dab70b7a1843ec818e6700e47e1384c7256f9e0ae41ab2c0b768a0de38a5ecf4f4fff5da6ef5ad4944
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-preview1.tar.xz
SIZE: 11423984 bytes SHA1: bbbc89d760cdaadbca3cbff587295864edeff0af SHA256: 1d99139116e4e245ce543edb137b2a8873c26e9f0bde88d8cee6789617cc8d0e SHA512: d12ff29778d8d940344619881b4d8247c2fb6b44ac2b2dbddb7078828e893cfac9a5a95b5588f0afdbed52bdb6dea95cff1b9ce3ad47dfa62209e97dab8810b6