- Ruby 4.0.0 yayımlandı; yeni Ruby Box ve ZJIT'i sunuyor ve çok sayıda performans ile dil iyileştirmesi içeriyor
- Ruby Box, sınıfları, modülleri, global değişkenleri ve native/Ruby kütüphane tanımlarını izole biçimde çalıştırabilen deneysel bir özellik
- ZJIT, Rust tabanlı yeni nesil bir JIT derleyicisi; mevcut YJIT'e göre yapısal olarak daha genişletilebilir ve dış katkıları kolaylaştırıyor
- Ractor paralel çalışma modeli, kararlılık ve performans açısından iyileştirildi; gelecekte deneysel durumdan çıkarılması planlanıyor
- Çekirdek sınıflar, standart kütüphane, C API, GC, JIT ve daha fazlasına yayılan güncellemelerle Ruby ekosisteminin performansı ve ölçeklenebilirliği güçlendirildi
Ruby 4.0 genel bakış
- Ruby 4.0.0, odağında Ruby Box ve ZJIT bulunan büyük bir güncelleme sürümü
- Paralel çalışma, dil sözdizimi, standart kütüphane, GC, JIT ve çeşitli alanlarda iyileştirmeler içeriyor
- İndirme seçenekleri
.tar.gz, .tar.xz, .zip biçimlerinde sunuluyor
Ruby Box
- Ruby Box, tanım izolasyonu sağlayan deneysel bir özellik
RUBY_BOX=1 ortam değişkeni ayarlandığında etkinleşiyor ve sınıfı Ruby::Box
- Box içinde yüklenen tanımlar dışarıdan izole edilir; bu sayede monkey patch, global/sınıf değişkenleri, sınıf/modül tanımları ve kütüphane değişiklikleri diğer box'ları etkilemez
- Başlıca kullanım örnekleri
- Test senaryoları arasında izole çalışma
- Blue-green deployment için paralel web uygulaması çalıştırma
- Bağımlılık güncellemelerini doğrulamak için paralel çalışma
- Gelecekte üst düzey bir “package API” uygulamasının temel API'si olarak kullanılması planlanıyor
ZJIT
- ZJIT, YJIT'in yeni nesil sürümü olarak geliştirilen yeni bir JIT derleyicisi
- Rust 1.85.0 veya üstü gerekiyor,
--zjit seçeneğiyle etkinleştiriliyor
- SSA IR tabanlı daha büyük derleme birimlerini destekliyor ve dış katkıları teşvik eden bir yapıya sahip
- Şu anda yorumlayıcıdan daha hızlı, ancak YJIT'ten daha yavaş
- Production kullanım önerilmiyor; Ruby 4.1'de performans artışı bekleniyor
Ractor iyileştirmeleri
- Ractor::Port sınıfı eklendi ve mesaj gönderme/alma sorunları çözüldü
Ractor.shareable_proc, Ractor'lar arasında Proc nesnelerinin paylaşımını kolaylaştırıyor
- Dahili veri yapılarındaki iyileştirmelerle global lock çekişmesi azaltıldı, paralellik artırıldı
- Ractor'ın deneysel durumu gelecek yıl kaldırılacak
Dil değişiklikleri
*nil, artık nil.to_a çağırmıyor (**nil ile aynı davranış)
- Mantıksal işleçler (
||, &&, and, or) satır devamı (dot chaining) sözdizimini destekliyor
- Kod okunabilirliği ve tutarlılığı artırıldı
Çekirdek sınıf güncellemeleri
- Array: Verimli aramayı desteklemek için
Array#rfind, Array#find eklendi
- Binding: Numaralı parametrelerin hariç tutulması ve
implicit_parameters ile ilgili metotlar eklendi
- Enumerator:
produce için size: anahtar sözcük argümanı eklendi
- ErrorHighlight:
ArgumentError oluştuğunda çağıran ve tanım tarafı kod parçacıkları gösteriliyor
- Fiber/Fiber::Scheduler:
raise(cause:), fiber_interrupt, yield ve daha fazlası eklendi
- File: Linux'ta
File::Stat#birthtime desteği
- IO:
Float::INFINITY timeout olarak kabul ediliyor, pipe tabanlı process oluşturma kaldırıldı
- Kernel:
#inspect özelleştirilebiliyor, Kernel#open içindeki pipe oluşturma kaldırıldı
- Math:
log1p, expm1 eklendi
- Pathname: Default gem statüsünden çekirdek sınıfa yükseltildi
- Proc: Anonim parametre çıktı biçimi birleştirildi
- Ractor: İletişim yapısı
Ractor::Port tabanlı hale getirildi, Ractor.yield ve benzerleri kaldırıldı
- Set: Çekirdek sınıfa yükseltildi,
inspect biçimi sadeleştirildi
- Socket:
open_timeout argümanı eklendi, timeout istisnaları birleştirildi
- String: Unicode 17.0.0 ve Emoji 17.0 desteği,
strip ailesi metotları genişletildi
- Thread:
raise(cause:) argümanı desteği
Standart kütüphane (Stdlib) güncellemeleri
- Default gem'e yükseltilenler:
ostruct, pstore, benchmark, logger, rdoc, win32ole, irb, reline, fiddle ve daha fazlası
- Eklenen default gem:
win32-registry 0.1.2
- Güncellenen default gem'ler:
RubyGems 4.0.3, bundler 4.0.3, openssl 4.0.0, json 2.18.0 ve daha fazlası
- Güncellenen bundled gem'ler:
minitest 6.0.0, rake 13.3.1, rbs 3.10.0, debug 1.11.1 ve daha fazlası
- RubyGems/Bundler 4 dahil
Platform desteği
- Windows: MSVC 14.0 altı sürümlere destek kaldırıldı (Visual Studio 2015 veya üstü gerekiyor)
Uyumluluk değişiklikleri
Ractor.yield, Ractor#take, Ractor#close_incoming, Ractor#close_outgoing kaldırıldı
ObjectSpace._id2ref kullanımdan kaldırıldı
Process::Status#&, #>> kaldırıldı
- Dahili frame (backtrace) çıktısı sadeleştirildi
ArgumentError backtrace'inde alıcı sınıf/modül adı gösteriliyor
Standart kütüphane uyumluluğu
- CGI kütüphanesi kaldırıldı, yalnızca
cgi/escape bırakıldı
Set'in çekirdeğe yükseltilmesiyle SortedSet için ayrı gem kurulumu gerekiyor
Net::HTTP'nin otomatik Content-Type başlığı ayarlaması kaldırıldı
C API güncellemeleri
rb_thread_fd_close devre dışı bırakıldı ve rb_io_close kullanımı öneriliyor
rb_thread_call_with_gvl, GVL olsun ya da olmasın çalışıyor
- Set için C API eklendi (
rb_set_new, rb_set_add, rb_set_delete vb.)
Uygulama ve performans iyileştirmeleri
Class#new çağrısı hızlandırıldı, özellikle anahtar sözcük argümanları kullanılırken
- GC heap pool'larının bağımsız büyümesiyle bellek kullanımı azaltıldı
- Büyük nesnelerin süpürülme hızı artırıldı
object_id, hash hesaplaması ve instance variable erişimi optimize edildi
- Ractor performansı iyileştirildi
- Lock'suz hash yapısı, daha az cache çekişmesi, nesne tahsisi optimizasyonu
- Deadlock, encoding ve GC ile ilgili hatalar düzeltildi
JIT ile ilgili
- ZJIT: Metot tabanlı JIT, Rust 1.85.0 veya üstü gerekiyor,
--zjit ya da RubyVM::ZJIT.enable ile etkinleştiriliyor
- YJIT: İstatistik seçenekleri değişti,
mem_size: ve call_threshold: eklendi
- RJIT:
--rjit kaldırıldı, ayrı bir depoya taşındı
Değişikliğin kapsamı
- Ruby 3.4.0'a kıyasla 3.889 dosya değişti, 230.769 satır eklendi, 297.003 satır silindi
- Ruby 4.0, performans, paralellik ve dil tutarlılığını ciddi biçimde güçlendiren büyük bir sürüm
İndirme
ruby-4.0.0.tar.gz, ruby-4.0.0.tar.xz, ruby-4.0.0.zip biçimleri sunuluyor
- Her dosya için SHA1, SHA256, SHA512 hash değerleri belirtilmiş durumda
Ruby hakkında
- Ruby, 1993'te Yukihiro Matsumoto (Matz) tarafından geliştirilen açık kaynaklı bir dil
- Çoklu platformda çalışır ve özellikle web geliştirme alanında dünya genelinde kullanılır
1 yorum
Hacker News görüşleri
Ruby'nin doğum günü kutlu olsun!
İnsanlar sık sık “Ruby'den typing olmadığı için ayrıldım” diyor ama artık RBS standart hâline gelme yolunda. Sorbet de bunu destekliyor ve kodun yanına doğrudan tip yazmayı sağlayan inline notation da geldi.
Ayrıca “Ruby'nin LSP'si zayıf” sözü de artık geride kaldı. ruby-lsp standart oldu ve “go to definition” desteği de var. Plugin mimarisi sayesinde birden fazla araç aynı AST'yi yeniden kullanabiliyor.
Paralellik de Ractor sayesinde epey gelişti; şimdi GC biraz daha iyileştirilirse tamamen deneysel aşamadan çıkacak gibi görünüyor.
ZJIT ve Box gibi yeni özellikler de var ama henüz production için önerilmiyor. Yine de giderek daha iyiye gidiyor.
Söz diziminin bir anda radikal biçimde değişmemesini de olumlu buluyorum
Noel'de her zaman yeni bir Ruby sürümü çıkmalı.
Bu kez ruby::box ilginç görünüyor. Özellik rollout'unu aynı anda iki sürümde çalıştırmayı mümkün kılıyor.
Ayrıca birden fazla satıra yayılmış
if condition1 && condition2yazabilmek de oldukça hoşif condition1 && condition2ifadesini birden fazla satıra bölerek yazıyordum ve çalışıyordu. Yeni söz diziminin farkının ne olduğunu anlamadımRuby 4.0'ın çıkmasına sevindim ama 2025'te ben tamamen Python'a geçtim.
Claude Code Ruby projelerimi %100 Python'a otomatik dönüştürdü ve o noktadan sonra Ruby kullanmak için bir neden kalmadı.
10 yıldan uzun süre Ruby'yi sevdim ve hakkında kitap da yazdım ama artık fastapi, pytorch, langchain, streamlit gibi ekosistem unsurları sayesinde kazanan Python oldu. Yine de Ruby'nin söz diziminin hâlâ en güzeli olduğunu düşünüyorum
Noel'de yeni bir Ruby sürümü olmadan olmaz. Matz ve ekibine teşekkürler
2025~26'da Ruby öğrenmek isteyen birine önerebileceğiniz güncel kaynaklar var mı? Resmî dokümanların dışında iyi kitaplar merak ediyorum
Pragmatic Studio Ruby on Rails kursu
Ruby gerçekten inanılmaz bir dil. Yakın zamanda Rails üzerinde tek bir Markdown dosyasından API üreten bir katman yaptım; aynısını Python'la yapmak çok daha karmaşık olurdu. JavaScript'le ise daha da korkunç olurdu. Ruby'nin metaprogramming yetenekleri gerçekten benzersiz
İç stack trace'lerin temizlenmiş olması sevindirici. Bir gün göreli yol desteği de gelirse güzel olur. Ayrıca Set'in sonunda hak ettiği değeri görmesi de iyi
Şu an Ruby kullanmayan bir şirkette çalışıyorum ama Ruby'yi hâlâ derinden seviyorum. Bu sürüm için teşekkürler, umarım yeniden kullanma fırsatım olur
Daha önce Ruby::Box (namespace) özelliğinin ciddi bir performans düşüşüne yol açtığını duymuştum; bu sürümde düzeltilip düzeltilmediğini merak ediyorum
Tooling tarafında iyileşme olup olmadığını merak ediyorum. Windows'ta LSP'yi hâlâ düzgün çalıştırabildiğimi hiç görmedim