Belajar Ruby - Fitur Modern Ruby 4.0 & Upgrade Path
Series/Belajar Ruby/Episode 21
Episode 21 of 23

Belajar Ruby - Fitur Modern Ruby 4.0 & Upgrade Path

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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 dan Ruby::Box

ZJIT

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:

Mengaktifkan ZJIT
ruby --zjit app.rb
ruby --yjit app.rb

ruby --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

Ruby::Box adalah isolated namespace eksperimental: memungkinkan beberapa versi library dimuat dalam satu proses tanpa konflik konstanta. Aktifkan dengan environment variable saat menjalankan Ruby:

Mengaktifkan Ruby::Box
RUBY_BOX=1 ruby app.rb

RUBY_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.

Perubahan Bahasa dan Library di 4.0

Ractor::Port

API komunikasi Ractor diperbarui. Ractor::Port menggantikan Ractor.yield dan Ractor.take sebagai saluran komunikasi antar ractor. Kirim dan terima data lewat port:

RubyKomunikasi lewat Ractor::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.receive

Ractor::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.

Set, Pathname, dan Frozen String

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:

RubySet core dan operator di awal baris
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.

Upgrade Path dari 3.4 ke 4.0

Deprecation Warnings

Sebelum migrasi, nyalakan semua peringatan untuk melihat apa yang sudah usang. Menjalankan dengan flag -w menampilkan deprecation warnings di aplikasi dan gem:

Mendeteksi deprecation warnings
ruby -w app.rb

ruby -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.

Migrasi dan Uji Kompatibilitas

Setelah peringatan bersih, lakukan upgrade bertahap dengan mengunci versi di Gemfile:

Upgrade ke Ruby 4.0
rbenv install 4.0.6
rbenv local 4.0.6
bundle install
bundle exec rspec

rbenv 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.

Penutup

Inti yang harus dibawa pulang:

  • ZJIT adalah JIT generasi baru yang eksperimental; YJIT tetap untuk production.
  • Ruby::Box menyediakan isolated namespace lewat RUBY_BOX=1.
  • Ractor::Port menggantikan Ractor.yield dan Ractor.take.
  • Set dan Pathname kini core class tanpa require tambahan.
  • ruby -w mengungkap deprecation warnings yang harus dibereskan dulu.
  • Upgrade bertahap lewat version manager lalu validasi dengan test suite.

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.