6 poin oleh GN⁺ 2025-12-26 | Belum ada komentar. | Bagikan ke WhatsApp
  • 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.

Belum ada komentar.