Ruby 4.0.0
(ruby-lang.org)- 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,.zipbiçimlerinde sunuluyor
Ruby Box
- Ruby Box, tanım izolasyonu sağlayan deneysel bir özellik
RUBY_BOX=1ortam 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,
--zjitseç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
- Rust 1.85.0 veya üstü gerekiyor,
- Ş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ıknil.to_açağırmıyor (**nilile 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#findeklendi - Binding: Numaralı parametrelerin hariç tutulması ve
implicit_parametersile ilgili metotlar eklendi - Enumerator:
produceiçinsize:anahtar sözcük argümanı eklendi - ErrorHighlight:
ArgumentErroroluştuğunda çağıran ve tanım tarafı kod parçacıkları gösteriliyor - Fiber/Fiber::Scheduler:
raise(cause:),fiber_interrupt,yieldve daha fazlası eklendi - File: Linux'ta
File::Stat#birthtimedesteği - IO:
Float::INFINITYtimeout olarak kabul ediliyor, pipe tabanlı process oluşturma kaldırıldı - Kernel:
#inspectözelleştirilebiliyor,Kernel#openiçindeki pipe oluşturma kaldırıldı - Math:
log1p,expm1eklendi - 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::Porttabanlı hale getirildi,Ractor.yieldve benzerleri kaldırıldı - Set: Çekirdek sınıfa yükseltildi,
inspectbiçimi sadeleştirildi - Socket:
open_timeoutargümanı eklendi, timeout istisnaları birleştirildi - String: Unicode 17.0.0 ve Emoji 17.0 desteği,
stripailesi 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,fiddleve 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.0ve daha fazlası - Güncellenen bundled gem'ler:
minitest 6.0.0,rake 13.3.1,rbs 3.10.0,debug 1.11.1ve 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_outgoingkaldırıldıObjectSpace._id2refkullanımdan kaldırıldıProcess::Status#&,#>>kaldırıldı- Dahili frame (backtrace) çıktısı sadeleştirildi
ArgumentErrorbacktrace'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/escapebırakıldı Set'in çekirdeğe yükseltilmesiyleSortedSetiçin ayrı gem kurulumu gerekiyorNet::HTTP'nin otomatikContent-Typebaşlığı ayarlaması kaldırıldı
C API güncellemeleri
rb_thread_fd_closedevre dışı bırakıldı verb_io_closekullanımı öneriliyorrb_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_deletevb.)
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,hashhesaplaması 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,
--zjitya daRubyVM::ZJIT.enableile etkinleştiriliyor - YJIT: İstatistik seçenekleri değişti,
mem_size:vecall_threshold:eklendi - RJIT:
--rjitkaldı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.zipbiç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