- Ruby 4.0.0 telah dirilis, memperkenalkan Ruby Box dan ZJIT serta mencakup banyak peningkatan performa dan bahasa
- Ruby Box adalah fitur eksperimental yang memungkinkan eksekusi terisolasi untuk kelas, modul, variabel global, dan definisi library native/Ruby
- ZJIT adalah kompiler JIT generasi berikutnya berbasis Rust, secara struktural lebih mudah diperluas dibanding YJIT dan memudahkan kontribusi eksternal
- Model eksekusi paralel Ractor ditingkatkan dari sisi stabilitas dan performa, dan status eksperimentalnya direncanakan akan dicabut di masa mendatang
- Pembaruan menyeluruh pada kelas inti, pustaka standar, C API, GC, JIT, dan lainnya memperkuat performa dan skalabilitas ekosistem Ruby
Gambaran umum Ruby 4.0
- Ruby 4.0.0 adalah versi pembaruan besar yang berfokus pada Ruby Box dan ZJIT
- Mencakup peningkatan di berbagai area seperti eksekusi paralel, sintaks bahasa, pustaka standar, GC, dan JIT
- Unduhan tersedia dalam format
.tar.gz, .tar.xz, dan .zip
Ruby Box
- Ruby Box adalah fitur eksperimental yang menyediakan isolasi definisi
- Diaktifkan dengan mengatur variabel lingkungan
RUBY_BOX=1, dan kelasnya adalah Ruby::Box
- Definisi yang dimuat di dalam box terisolasi dari luar, sehingga monkey patch, variabel global/kelas, definisi kelas/modul, dan perubahan library tidak memengaruhi box lain
- Contoh penggunaan utama
- Eksekusi terisolasi antar test case
- Menjalankan web app paralel untuk deployment blue-green
- Eksekusi paralel untuk memverifikasi pembaruan dependensi
- Ke depannya akan dimanfaatkan sebagai API dasar untuk implementasi “package API” tingkat tinggi
ZJIT
- ZJIT adalah kompiler JIT baru yang dikembangkan sebagai versi generasi berikutnya dari YJIT
- Memerlukan Rust 1.85.0 atau lebih tinggi, diaktifkan dengan opsi
--zjit
- Mendukung unit kompilasi yang lebih besar berbasis SSA IR dan memiliki struktur yang mendorong kontribusi eksternal
- Saat ini lebih cepat daripada interpreter, tetapi lebih lambat daripada YJIT
- Penggunaan di produksi belum direkomendasikan, dan peningkatan performa direncanakan pada Ruby 4.1
Peningkatan Ractor
- Penambahan kelas Ractor::Port menyelesaikan masalah pengiriman dan penerimaan pesan
Ractor.shareable_proc memudahkan berbagi objek Proc antar Ractor
- Perbaikan struktur data internal mengurangi kontensi global lock dan meningkatkan paralelisme
- Status eksperimental Ractor direncanakan akan dicabut tahun depan
Perubahan bahasa
*nil tidak lagi memanggil nil.to_a (berperilaku sama seperti **nil)
- Operator logika (
||, &&, and, or) kini mendukung sintaks line continuation (dot chaining)
- Meningkatkan keterbacaan dan konsistensi kode
Pembaruan kelas inti
- Array:
Array#rfind, Array#find ditambahkan untuk pencarian yang lebih efisien
- Binding: pengecualian numbered parameter dan penambahan method terkait
implicit_parameters
- Enumerator: argumen kata kunci
size: ditambahkan ke produce
- ErrorHighlight: saat
ArgumentError terjadi, menampilkan cuplikan kode pemanggil dan lokasi definisi
- Fiber/Fiber::Scheduler: penambahan
raise(cause:), fiber_interrupt, yield, dan lainnya
- File: dukungan
File::Stat#birthtime di Linux
- IO: mengizinkan timeout
Float::INFINITY, menghapus pembuatan proses berbasis pipe
- Kernel:
#inspect kini dapat dikustomisasi, pembuatan pipe pada Kernel#open dihapus
- Math: penambahan
log1p, expm1
- Pathname: dipromosikan dari default gem menjadi kelas inti
- Proc: format output parameter anonim diseragamkan
- Ractor: struktur komunikasi diubah ke basis
Ractor::Port, Ractor.yield dan lainnya dihapus
- Set: dipromosikan menjadi kelas inti, format
inspect disederhanakan
- Socket: argumen
open_timeout ditambahkan, exception timeout diseragamkan
- String: dukungan Unicode 17.0.0, Emoji 17.0, perluasan method keluarga
strip
- Thread: dukungan argumen
raise(cause:)
Pembaruan pustaka standar (Stdlib)
- Dipromosikan menjadi default gem:
ostruct, pstore, benchmark, logger, rdoc, win32ole, irb, reline, fiddle, dan lainnya
- Default gem baru:
win32-registry 0.1.2
- Pembaruan default gem:
RubyGems 4.0.3, bundler 4.0.3, openssl 4.0.0, json 2.18.0, dan lainnya
- Pembaruan bundled gem:
minitest 6.0.0, rake 13.3.1, rbs 3.10.0, debug 1.11.1, dan lainnya
- Menyertakan RubyGems/Bundler 4
Dukungan platform
- Windows: menghentikan dukungan untuk versi di bawah MSVC 14.0 (memerlukan Visual Studio 2015 atau lebih baru)
Perubahan kompatibilitas
Ractor.yield, Ractor#take, Ractor#close_incoming, Ractor#close_outgoing dihapus
ObjectSpace._id2ref tidak digunakan lagi
Process::Status#&, #>> dihapus
- Output internal frame (backtrace) disederhanakan
- Pada backtrace
ArgumentError, nama kelas/modul receiver kini ditampilkan
Kompatibilitas pustaka standar
- Library CGI dihapus, hanya
cgi/escape yang dipertahankan
- Karena
Set dipromosikan ke inti, SortedSet kini memerlukan instalasi gem terpisah
- Pengaturan otomatis header
Content-Type pada Net::HTTP dihapus
Pembaruan C API
rb_thread_fd_close dinonaktifkan dan disarankan menggunakan rb_io_close
rb_thread_call_with_gvl kini bekerja terlepas dari ada atau tidaknya GVL
- Penambahan C API untuk Set (
rb_set_new, rb_set_add, rb_set_delete, dll.)
Peningkatan implementasi dan performa
- Kecepatan pemanggilan
Class#new ditingkatkan, terutama saat menggunakan argumen kata kunci
- Penggunaan memori berkurang berkat pertumbuhan independen GC heap pool
- Kecepatan sweeping objek besar ditingkatkan
- Optimasi pada perhitungan
object_id, hash, dan akses instance variable
- Peningkatan performa Ractor
- Struktur hash tanpa lock, pengurangan kontensi cache, optimasi alokasi objek
- Perbaikan bug terkait deadlock, encoding, dan GC
Terkait JIT
- ZJIT: JIT berbasis method, memerlukan Rust 1.85.0 atau lebih tinggi, diaktifkan dengan
--zjit atau RubyVM::ZJIT.enable
- YJIT: perubahan pada opsi statistik, penambahan
mem_size: dan call_threshold:
- RJIT:
--rjit dihapus, dipindahkan ke repositori terpisah
Skala perubahan
- Dibanding Ruby 3.4.0, terdapat 3.889 file berubah, 230.769 baris ditambahkan, dan 297.003 baris dihapus
- Ruby 4.0 adalah rilis mayor yang secara signifikan memperkuat performa, paralelisme, dan konsistensi bahasa
Unduhan
- Tersedia dalam format
ruby-4.0.0.tar.gz, ruby-4.0.0.tar.xz, ruby-4.0.0.zip
- Nilai hash SHA1, SHA256, SHA512 untuk masing-masing file dicantumkan
Tentang Ruby
- Ruby adalah bahasa open-source yang dikembangkan oleh Yukihiro Matsumoto (Matz) pada 1993
- Berjalan di berbagai platform, dan terutama digunakan secara luas di seluruh dunia dalam pengembangan web
Belum ada komentar.