Episode ini membedah fitur Ruby 4.0: ZJIT sebagai JIT generasi baru, Ruby::Box untuk isolated namespace, Ractor::Port sebagai API komunikasi ractor, perubahan bahasa dan library, serta jalur upgrade dari 3.4 ke 4.0 melalui deprecation warnings dan uji kompatibilitas.

Ruby 4.0 dirilis pada 25 Desember 2025, tepat di peringatan 30 tahun Ruby. Episode 21 membedah fitur-fitur besarnya: ZJIT sebagai JIT generasi baru, Ruby::Box untuk isolated namespace, Ractor::Port sebagai API komunikasi ractor baru, serta berbagai perubahan bahasa dan standard library.
Di akhir episode, kita susun jalur upgrade dari 3.4 ke 4.0 — dari deprecation warnings, magic comments, hingga uji kompatibilitas gem. Memahami pembaruan ini membuat kalian siap memakai ekosistem terkini.
ZJIT adalah Just-in-Time compiler generasi baru yang menjadi basis untuk performa Ruby 4.1. Ia masih eksperimental di 4.0 — YJIT tetap rekomendasi untuk production. Kalian bisa mencoba dengan flag saat menjalankan:
ruby --zjit app.rb
ruby --yjit app.rbruby --zjit app.rb menyalakan ZJIT, sedangkan ruby --yjit app.rb menyalakan YJIT. Untuk production tetap pilih YJIT sampai ZJIT matang. Pada rilis 4.0, RJIT yang sebelumnya eksperimental dihapus — fokus pengembangan JIT kini di YJIT dan ZJIT.
Ruby::Box adalah isolated namespace eksperimental: memungkinkan beberapa versi library dimuat dalam satu proses tanpa konflik konstanta. Aktifkan dengan environment variable saat menjalankan Ruby:
RUBY_BOX=1 ruby app.rbRUBY_BOX=1 ruby app.rb mengaktifkan fitur ini. Namespace terisolasi berguna untuk menjalankan plugin atau gem yang bentrok definisi kelasnya. Karena masih eksperimental, uji cermat sebelum dipakai di production.
API komunikasi Ractor diperbarui. Ractor::Port menggantikan Ractor.yield dan Ractor.take sebagai saluran komunikasi antar ractor. Kirim dan terima data lewat port:
ractor = Ractor.new do
port = Ractor::Port.new
Ractor.current[:port] = port
loop { port.send(port.receive * 2) }
end
port = ractor[:port]
port.send(21)
puts port.receiveRactor::Port.new membuat saluran komunikasi, port.send(...) mengirim, port.receive menerima. Ractor#join dan Ractor#value tetap tersedia untuk menunggu dan mengambil hasil. API baru ini membuat paralelisme Ractor lebih eksplisit dan mudah dipahami.
Ruby 4.0 menjadikan Set dan Pathname sebagai core class — tidak perlu lagi require tambahan untuk memakainya. Frozen string literal menjadi penegakan yang lebih kuat, dan operator logika kini boleh berada di awal baris lanjutan:
set = Set[1, 2, 3]
path = Pathname.new("/etc/hosts")
hasil = true
&& set.include?(2)Set[1, 2, 3] kini langsung tersedia. && di awal baris membuat rantai kondisi mudah dibaca. Ruby 4.0 juga mendukung Unicode 17.0 dan memperbolehkan *nil — mengalikan array dengan nil menghasilkan array kosong.
Sebelum migrasi, nyalakan semua peringatan untuk melihat apa yang sudah usang. Menjalankan dengan flag -w menampilkan deprecation warnings di aplikasi dan gem:
ruby -w app.rbruby -w app.rb menyalakan warning level verbose. Catat semua peringatan deprecation di kode sendiri — perbaiki dulu yang ada di aplikasi kalian, lalu evaluasi warning dari gem yang sudah usang. Peringatan ini adalah peta jalan apa yang harus diganti sebelum 4.0.
Setelah peringatan bersih, lakukan upgrade bertahap dengan mengunci versi di Gemfile:
rbenv install 4.0.6
rbenv local 4.0.6
bundle install
bundle exec rspecrbenv install 4.0.6 menginstal versi terbaru, rbenv local 4.0.6 mengunci versi di project. Setelah bundle install, jalankan seluruh test suite dengan bundle exec rspec — kegagalan test adalah sinyal kompatibilitas gem yang perlu diperbarui atau diganti. Periksa catatan rilis di NEWS.md dan laman news ruby-lang.org.
Warning
Jangan upgrade langsung di production. Siapkan branch, perbaiki deprecation warnings terlebih dahulu, lalu validasi dengan test lengkap dan staging sebelum dipromosikan.
Inti yang harus dibawa pulang:
RUBY_BOX=1.Ractor::Port menggantikan Ractor.yield dan Ractor.take.ruby -w mengungkap deprecation warnings yang harus dibereskan dulu.Di episode 22, episode terakhir seri ini, kita melihat ekosistem modern secara utuh: Rails 8.x, Sinatra, dan Hanami, tooling Rake dan Foreman, implementasi alternatif JRuby dan TruffleRuby, perbandingan Ruby dengan bahasa lain, plus rekap dan checklist production.