Ruby 4.0.0 Yayınlandı
naruse tarafından 25.12.2025 tarihinde gönderildi
Çeviri: Ender Ahmet Yurt
Ruby 4.0.0 sürümünün yayınlandığını duyurmaktan mutluluk duyuyoruz. Ruby 4.0, “Ruby Box” ve “ZJIT” sunuyor ve birçok iyileştirme ekliyor.
Ruby Box
Ruby Box, tanımlamalar hakkında ayrım sağlamak için yeni bir (deneysel) özelliktir. Ruby Box, RUBY_BOX=1 ortam değişkeni belirtildiğinde etkinleştirilir. Sınıf Ruby::Box‘tır.
Bir box içinde yüklenen tanımlamalar box içinde izole edilir. Ruby Box, monkey patch’leri, global/sınıf değişkenlerinin değişikliklerini, sınıf/modül tanımlamalarını ve yüklenmiş native/ruby kütüphanelerini diğer box’lardan izole edebilir/ayırabilir.
Beklenen kullanım durumları şunlardır:
- Test durumları bir şeyi geçersiz kılmak için monkey patch kullandığında diğer testleri korumak için test durumlarını box içinde çalıştırma
- Bir Ruby sürecindeki bir uygulama sunucusunda mavi-yeşil dağıtımı yürütmek için web uygulaması box’larını paralel olarak çalıştırma
- Ruby kodu kullanarak yanıt farkını kontrol ederek belirli bir süre için bağımlılık güncellemelerini değerlendirmek için web uygulaması box’larını paralel olarak çalıştırma
- Bir tür “paket” (üst düzey) API’sini uygulamak için temel (alt düzey) API olarak kullanılır (henüz tasarlanmamıştır)
“Ruby Box” detayı için, Ruby::Box‘a bakın. [Feature #21311] [Misc #21385]
ZJIT
ZJIT, YJIT’in yeni nesli olarak geliştirilen yeni bir tam zamanında (JIT) derleyicisidir. ZJIT desteği ile Ruby oluşturmak için Rust 1.85.0 veya daha yenisine ihtiyacınız vardır ve ZJIT, --zjit belirtildiğinde etkinleştirilir.
Ruby için yeni bir derleyici oluşturuyoruz çünkü hem performans tavanını yükseltmek (daha büyük derleme birimi boyutu ve SSA IR) hem de daha fazla dış katkıyı teşvik etmek istiyoruz (daha geleneksel bir metot derleyicisi olarak). Daha fazla ayrıntı için blog yazımıza bakın.
ZJIT yorumlayıcıdan daha hızlıdır, ancak henüz YJIT kadar hızlı değildir. ZJIT ile deneme yapmanızı öneriyoruz, ancak şimdilik onu üretime dağıtmaktan kaçının. Ruby 4.1 ZJIT için bizi takip edin.
Ractor İyileştirmeleri
Ruby’nin paralel yürütme mekanizması olan Ractor, birkaç iyileştirme aldı. Mesaj gönderme ve alma ile ilgili sorunları çözmek için yeni bir sınıf olan Ractor::Port tanıtıldı (blog yazımıza bakın). Ek olarak, Ractor.shareable_proc, Ractor’lar arasında Proc nesnelerini paylaşmayı kolaylaştırır.
Performans tarafında, birçok dahili veri yapısı, global bir kilit üzerindeki çekişmeyi önemli ölçüde azaltmak ve daha iyi paralelliğin kilidini açmak için iyileştirildi. Ractor’lar artık daha az dahili veri paylaşıyor, bu da paralel olarak çalışırken daha az CPU önbellek çekişmesi ile sonuçlanıyor.
Ractor ilk olarak Ruby 3.0’da deneysel bir özellik olarak tanıtıldı. Gelecek yıl “deneysel” durumunu kaldırmayı hedefliyoruz.
Dil değişiklikleri
-
*nilartıknil.to_açağırmaz, benzer şekilde**nilnil.to_hashçağırmaz. [Feature #21047] -
Bir satırın başındaki mantıksal ikili operatörler (
||,&&,andveor) önceki satırı devam ettirir, akıcı nokta gibi. Aşağıdaki kod örnekleri eşittir:if condition1 && condition2 ... endÖnceden:
if condition1 && condition2 ... endif condition1 && condition2 ... end
Temel sınıf güncellemeleri
Not: Yalnızca öne çıkan sınıf güncellemelerini listeliyoruz.
-
Array
Array#rfind,array.reverse_each.find‘a daha verimli bir alternatif olarak eklendi [Feature #21678]Array#find,Enumerable#find‘ın daha verimli bir geçersiz kılması olarak eklendi [Feature #21678]
-
Binding
-
Binding#local_variablesartık numaralı parametreleri içermez. Ayrıca,Binding#local_variable_get,Binding#local_variable_setveBinding#local_variable_defined?numaralı parametreleri işlemeyi reddeder. [Bug #21049] -
Binding#implicit_parameters,Binding#implicit_parameter_getveBinding#implicit_parameter_defined?numaralı parametrelere ve “it” parametresine erişmek için eklendi. [Bug #21049]
-
-
Enumerator
-
Enumerator.produceartık enumerator’ün boyutunu belirtmek için isteğe bağlı birsizeanahtar kelime argümanı kabul eder. Bu bir tamsayı,Float::INFINITY, çağrılabilir bir nesne (lambda gibi) veya bilinmeyen boyutu belirtmek içinnilolabilir. Belirtilmediğinde, boyut varsayılan olarakFloat::INFINITY‘dir.# Sonsuz enumerator enum = Enumerator.produce(1, size: Float::INFINITY, &:succ) enum.size # => Float::INFINITY # Bilinen/hesaplanabilir boyuta sahip sonlu enumerator abs_dir = File.expand_path("./baz") # => "/foo/bar/baz" traverser = Enumerator.produce(abs_dir, size: -> { abs_dir.count("/") + 1 }) { raise StopIteration if it == "/" File.dirname(it) } traverser.size # => 4
-
-
ErrorHighlight
-
Bir ArgumentError yükseldiğinde, artık hem metot çağrısı (çağıran) hem de metot tanımı (çağrılan) için kod parçacıkları görüntüler. [Feature #21543]
test.rb:1:in 'Object#add': wrong number of arguments (given 1, expected 2) (ArgumentError) caller: test.rb:3 | add(1) ^^^ callee: test.rb:1 | def add(x, y) = x + y ^^^ from test.rb:3:in '<main>'
-
-
Fiber
Kernel#raise‘e benzer şekildeFiber#raise(cause:)argümanı için destek tanıtıldı. [Feature #21360]
-
Fiber::Scheduler
-
Bir fiber’ı verilen istisna ile kesmek için
Fiber::Scheduler#fiber_interrupttanıtıldı. İlk kullanım durumu, IO işlemi kapatıldığında engelleyici bir IO işleminde bekleyen bir fiber’ı kesmektir. [Feature #21166] -
Sinyal istisnaları devre dışı bırakıldığında fiber zamanlayıcının işlemeye devam etmesine izin vermek için
Fiber::Scheduler#yieldtanıtıldı. [Bug #21633] -
Asenkron
IO#closeiçinFiber::Scheduler#io_closehook’u yeniden tanıtıldı. -
IO yazma arabelleğini boşaltırken
Fiber::Scheduler#io_writeçağrıldı. [Bug #21789]
-
-
File
File::Stat#birthtimeartık Linux’ta çekirdek ve dosya sistemi tarafından desteklendiğinde statx sistem çağrısı aracılığıyla kullanılabilir. [Feature #21205]
-
IO
-
IO.selectzaman aşımı argümanı olarakFloat::INFINITYkabul eder. [Feature #20610] -
Kullanımdan kaldırılan bir davranış,
IOsınıfı metodları ile öndeki|ile süreç oluşturma, kaldırıldı. [Feature #19630]
-
-
Kernel
-
Kernel#inspectartık#inspectdizesinde hangi örnek değişkenlerinin görüntüleneceğini kontrol etmeye izin veren bir#instance_variables_to_inspectmetodunun varlığını kontrol eder:class DatabaseConfig def initialize(host, user, password) @host = host @user = user @password = password end private def instance_variables_to_inspect = [:@host, :@user] end conf = DatabaseConfig.new("localhost", "root", "hunter2") conf.inspect #=> #<DatabaseConfig:0x0000000104def350 @host="localhost", @user="root"> -
Kullanımdan kaldırılan bir davranış,
Kernel#openile öndeki|ile süreç oluşturma, kaldırıldı. [Feature #19630]
-
-
Math
Math.log1pveMath.expm1eklendi. [Feature #21527]
-
Pathname
- Pathname varsayılan bir gem’den Ruby’nin temel bir sınıfına yükseltildi. [Feature #17473]
-
Proc
Proc#parametersartık anonim isteğe bağlı parametreleri[:opt, nil]yerine[:opt]olarak gösterir, bu da çıktıyı anonim parametre gerekli olduğundaki ile tutarlı hale getirir. [Bug #20974]
-
Ractor
-
Ractor’lar arasında iletişim kurmak için yeni bir senkronizasyon mekanizması için
Ractor::Portsınıfı eklendi. [Feature #21262]port1 = Ractor::Port.new port2 = Ractor::Port.new Ractor.new port1, port2 do |port1, port2| port1 << 1 port2 << 11 port1 << 2 port2 << 12 end 2.times{ p port1.receive } #=> 1, 2 2.times{ p port2.receive } #=> 11, 12Ractor::Portaşağıdaki metodları sağlar:Ractor::Port#receiveRactor::Port#send(veyaRactor::Port#<<)Ractor::Port#closeRactor::Port#closed?
Sonuç olarak,
Ractor.yieldveRactor#takekaldırıldı. -
Bir Ractor’ın sonlandırılmasını beklemek için
Ractor#joinveRactor#valueeklendi. BunlarThread#joinveThread#value‘ya benzer. -
Ractor#join‘i uygulamak için dahili olarak kullanılan alt düzey arayüzler olarakRactor#monitorveRactor#unmonitoreklendi. -
Ractor.selectartık yalnızca Ractor’ları ve Port’ları kabul eder. Ractor’lar verilirse, bir Ractor sonlandığında döner. -
Ractor#default_porteklendi. HerRactor‘ın,Ractor.send,Ractor.receivetarafından kullanılan bir varsayılan portu vardır. -
Ractor#close_incomingveRactor#close_outgoingkaldırıldı. -
Paylaşılabilir Proc veya lambda yapmak için
Ractor.shareable_procveRactor.shareable_lambdatanıtıldı. [Feature #21550], [Feature #21557]
-
-
Range
-
Range#to_setartık sonsuz aralıklarla ilgili sorunları önlemek için boyut kontrolleri yapar. [Bug #21654] -
Range#overlap?artık sonsuz (sınırsız) aralıkları doğru şekilde işler. [Bug #21185] -
Başlangıçsız tamsayı aralıklarında
Range#maxdavranışı düzeltildi. [Bug #21174] [Bug #21175]
-
-
Ruby
- Ruby ile ilgili sabitleri içeren yeni bir üst düzey
Rubymodülü tanımlandı. Bu modül Ruby 3.4’te ayrıldı ve şimdi resmi olarak tanımlandı. [Feature #20884]
- Ruby ile ilgili sabitleri içeren yeni bir üst düzey
-
Ruby::Box
- Tanımlamalar hakkında ayrım sağlamak için yeni bir (deneysel) özellik. “Ruby Box” detayı için, doc/language/box.md‘ye bakın. [Feature #21311] [Misc #21385]
-
Set
-
Setartık otomatik yüklenen bir stdlib sınıfı yerine temel bir sınıftır. [Feature #21216] -
Set#inspectartık literal dizilere benzer şekilde daha basit bir görüntü kullanır. (örn.#<Set: {1, 2, 3}>yerineSet[1, 2, 3]). [Feature #21389] -
Set#to_setveEnumerable#to_set‘e argüman geçirmek artık kullanımdan kaldırıldı. [Feature #21390]
-
-
Socket
Socket.tcpveTCPSocket.new, ilk bağlantı için zaman aşımını belirtmek içinopen_timeoutanahtar kelime argümanını kabul eder. [Feature #21347]TCPSocket.new‘de kullanıcı tarafından belirtilen bir zaman aşımı oluştuğunda, daha önce duruma bağlı olarakErrno::ETIMEDOUTveyaIO::TimeoutErroryükseltilebilirdi. Bu davranış, artıkIO::TimeoutError‘ın tutarlı bir şekilde yükseltilmesi için birleştirildi. (LütfenSocket.tcp‘de, benzer durumlarda halaErrno::ETIMEDOUT‘un yükseltilebileceği durumlar olduğunu ve her iki durumda da zaman aşımı işletim sistemi düzeyinde oluştuğundaErrno::ETIMEDOUT‘un yükseltilebileceğini unutmayın.)
-
String
-
Unicode, Versiyon 17.0.0’a ve Emoji Versiyon 17.0’a güncellendi. [Feature #19908][Feature #20724][Feature #21275] (Regexp için de geçerlidir)
-
String#strip,strip!,lstrip,lstrip!,rstripverstrip!*selectorsargümanlarını kabul edecek şekilde genişletildi. [Feature #21552]
-
-
Thread
Kernel#raise‘e benzer şekildeThread#raise(cause:)argümanı için destek tanıtıldı. [Feature #21360]
Stdlib güncellemeleri
Yalnızca önemli özellik değişiklikleri olan stdlib değişikliklerini listeliyoruz.
Diğer değişiklikler aşağıdaki bölümlerde listelenmiştir. Ayrıca GitHub sürümleri varsa, önceki paketlenmiş sürüm olan Ruby 3.4.0’dan yayın geçmişini listeledik.
Aşağıdaki paketlenmiş gem’ler varsayılan gem’lerden yükseltildi.
- ostruct 0.6.3
- pstore 0.2.0
- 0.1.4’ten v0.2.0‘a
- benchmark 0.5.0
- logger 1.7.0
- rdoc 7.0.2
- win32ole 1.9.2
- 1.9.1’den v1.9.2‘ye
- irb 1.16.0
- reline 0.6.3
- readline 0.0.4
- fiddle 1.1.8
Aşağıdaki varsayılan gem eklendi.
- win32-registry 0.1.2
Aşağıdaki varsayılan gem’ler güncellendi.
- RubyGems 4.0.3
- bundler 4.0.3
- date 3.5.1
- delegate 0.6.1
- digest 3.2.1
- 3.2.0’dan v3.2.1‘e
- english 0.8.1
- 0.8.0’dan v0.8.1‘e
- erb 6.0.1
- error_highlight 0.7.1
- etc 1.4.6
- fcntl 1.3.0
- 1.2.0’dan v1.3.0‘a
- fileutils 1.8.0
- 1.7.3’ten v1.8.0‘a
- forwardable 1.4.0
- 1.3.3’ten v1.4.0‘a
- io-console 0.8.2
- 0.8.1’den v0.8.2‘ye
- io-nonblock 0.3.2
- io-wait 0.4.0
- 0.3.2’den v0.3.3, v0.3.5.test1, v0.3.5, v0.3.6, v0.4.0‘a
- ipaddr 1.2.8
- json 2.18.0
- net-http 0.9.1
- openssl 4.0.0
- optparse 0.8.1
- pp 0.6.3
- 0.6.2’den v0.6.3‘e
- prism 1.7.0
- psych 5.3.1
- resolv 0.7.0
- stringio 3.2.0
- strscan 3.1.6
- time 0.4.2
- 0.4.1’den v0.4.2‘ye
- timeout 0.6.0
- uri 1.1.1
- weakref 0.1.4
- 0.1.3’ten v0.1.4‘e
- zlib 3.2.2
- 3.2.1’den v3.2.2‘ye
Aşağıdaki paketlenmiş gem’ler güncellendi.
- minitest 6.0.0
- power_assert 3.0.1
- rake 13.3.1
- test-unit 3.7.3
- rexml 3.4.4
- rss 0.3.2
- 0.3.1’den 0.3.2‘ye
- net-ftp 0.3.9
- 0.3.8’den v0.3.9‘a
- net-imap 0.6.2
- net-smtp 0.5.1
- 0.5.0’dan v0.5.1‘e
- matrix 0.4.3
- 0.4.2’den v0.4.3‘e
- prime 0.1.4
- 0.1.3’ten v0.1.4‘e
- rbs 3.10.0
- 3.8.0’dan v3.8.1, v3.9.0.dev.1, v3.9.0.pre.1, v3.9.0.pre.2, v3.9.0, v3.9.1, v3.9.2, v3.9.3, v3.9.4, v3.9.5, v3.10.0.pre.1, v3.10.0.pre.2, v3.10.0‘a
- typeprof 0.31.1
- debug 1.11.1
- 1.11.0’dan v1.11.1‘e
- base64 0.3.0
- 0.2.0’dan v0.3.0‘a
- bigdecimal 4.0.1
- drb 2.2.3
- 2.2.1’den v2.2.3‘e
- syslog 0.3.0
- 0.2.0’dan v0.3.0‘a
- csv 3.3.5
- repl_type_completor 0.1.12
RubyGems ve Bundler
Ruby 4.0, RubyGems ve Bundler sürüm 4’ü paketledi. Detaylar için aşağıdaki bağlantılara bakın.
- RubyGems/Bundler 4’e Yükseltme - RubyGems Blogu
- 4.0.0 Yayınlandı - RubyGems Blogu
- 4.0.1 Yayınlandı - RubyGems Blogu
- 4.0.2 Yayınlandı - RubyGems Blogu
- 4.0.3 Yayınlandı - RubyGems Blogu
Desteklenen platformlar
-
Windows
- 14.0’dan (_MSC_VER 1900) eski MSVC sürümleri için destek kaldırıldı. Bu, artık Visual Studio 2015 veya daha yenisinin gerekli olduğu anlamına gelir.
Uyumluluk sorunları
-
Ractor::Porteklenmesi nedeniyle aşağıdaki metodlar Ractor’dan kaldırıldı:Ractor.yieldRactor#takeRactor#close_incomingRactor#close_outgoing
-
ObjectSpace._id2refkullanımdan kaldırıldı. [Feature #15408] -
Process::Status#&veProcess::Status#>>kaldırıldı. Ruby 3.3’te kullanımdan kaldırılmışlardı. [Bug #19868] -
rb_path_checkkaldırıldı. Bu fonksiyon, Ruby 2.7’de kaldırılan$SAFEyol kontrolü için kullanılıyordu ve zaten kullanımdan kaldırılmıştı. [Feature #20971] -
“Yanlış sayıda argüman”
ArgumentError‘ı için geri izleme artık alıcının sınıf veya modül adını içerir (örneğin,bar‘da yerineFoo#bar‘da). [Bug #21698] -
Geri izlemeler artık
internalçerçevelerini görüntülemiyor. Bu metodlar artık Ruby kaynak dosyasındaymış gibi görünür, diğer C ile uygulanan metodlarla tutarlı. [Bug #20968]Önce:
ruby -e '[1].fetch_values(42)' <internal:array>:211:in 'Array#fetch': index 42 outside of array bounds: -1...1 (IndexError) from <internal:array>:211:in 'block in Array#fetch_values' from <internal:array>:211:in 'Array#map!' from <internal:array>:211:in 'Array#fetch_values' from -e:1:in '<main>'Sonra:
$ ruby -e '[1].fetch_values(42)' -e:1:in 'Array#fetch_values': index 42 outside of array bounds: -1...1 (IndexError) from -e:1:in '<main>'
Stdlib uyumluluk sorunları
-
CGI kütüphanesi varsayılan gem’lerden kaldırıldı. Şimdi yalnızca aşağıdaki metodlar için
cgi/escapesağlıyoruz:CGI.escapeveCGI.unescapeCGI.escapeHTMLveCGI.unescapeHTMLCGI.escapeURIComponentveCGI.unescapeURIComponentCGI.escapeElementveCGI.unescapeElement
-
Set‘in stdlib’den temel sınıfa taşınmasıyla birlikte,set/sorted_set.rbkaldırıldı veSortedSetartık otomatik yüklenen bir sabit değil. Lütfensorted_setgem’ini yükleyin veSortedSetkullanmak içinrequire 'sorted_set'yapın. [Feature #21287] -
Net::HTTP
- Başlık açıkça ayarlanmadığında gövdeli istekler (örneğin,
POST,PUT) için otomatik olarakContent-Typebaşlığınıapplication/x-www-form-urlencodedolarak ayarlama varsayılan davranışı kaldırıldı. Uygulamanız bu otomatik varsayılana güveniyorsa, istekleriniz artık Content-Type başlığı olmadan gönderilecek ve potansiyel olarak belirli sunucularla uyumluluğu bozacaktır. [GH-net-http #205]
- Başlık açıkça ayarlanmadığında gövdeli istekler (örneğin,
C API güncellemeleri
-
IO
rb_thread_fd_closekullanımdan kaldırıldı ve artık işlemsizdir. Dosya tanımlayıcılarını C uzantılarından Ruby koduna açmanız gerekiyorsa,RUBY_IO_MODE_EXTERNALkullanarak birIOörneği oluşturun ve kapatmak içinrb_io_close(io)kullanın (bu aynı zamandaIOörneğindeki tüm bekleyen işlemleri keser ve bekler). Dosya tanımlayıcılarını doğrudan kapatmak bekleyen işlemleri kesmez ve tanımsız davranışlara yol açabilir. Başka bir deyişle, ikiIOnesnesi aynı dosya tanımlayıcısını paylaşıyorsa, birini kapatmak diğerini etkilemez. [Feature #18455]
-
GVL
rb_thread_call_with_gvlartık GVL ile veya GVL olmadan çalışır. Bu, gem’lerinruby_thread_has_gvl_pkontrolünden kaçınmasına olanak tanır. Lütfen hala GVL konusunda dikkatli olun. [Feature #20750]
-
Set
-
Setiçin bir C API’si eklendi. Aşağıdaki metodlar desteklenir: [Feature #21459]rb_set_foreachrb_set_newrb_set_new_caparb_set_lookuprb_set_addrb_set_clearrb_set_deleterb_set_size
-
Uygulama iyileştirmeleri
Class#new(örn.Object.new) tüm durumlarda daha hızlıdır, ancak özellikle anahtar kelime argümanları geçirirken. Bu aynı zamanda YJIT ve ZJIT’e de entegre edilmiştir. [Feature #21254]- Farklı boyut havuzlarının GC yığınları artık bağımsız olarak büyür, bu da yalnızca bazı havuzlar uzun ömürlü nesneler içerdiğinde bellek kullanımını azaltır
- GC süpürmesi büyük nesnelerin sayfalarında daha hızlıdır
- “Genel ivar” nesneleri (String, Array,
TypedData, vb.) artık daha hızlı örnek değişken erişimi için yeni bir dahili “fields” nesnesi kullanır - GC, ilk kez kullanılana kadar dahili bir
id2reftablosunu tutmaktan kaçınır,object_idtahsisini ve GC süpürmesini daha hızlı hale getirir object_idvehash, Class ve Module nesnelerinde daha hızlıdır- Daha büyük bignum Integer’lar değişken genişlik tahsisi kullanarak gömülü kalabilir
Random,Enumerator::Product,Enumerator::Chain,Addrinfo,StringScannerve bazı dahili nesneler artık yazma engelleyici korumalıdır, bu da GC yükünü azaltır.
Ractor
Ractor’ları daha kararlı, performanslı ve kullanılabilir hale getirmek için çok sayıda çalışma yapıldı. Bu iyileştirmeler Ractor uygulamasını deneysel durumdan çıkarmaya daha yaklaştırıyor.
- Performans iyileştirmeleri
- Donmuş dizeler ve sembol tablosu dahili olarak kilitsiz bir hash seti kullanır [Feature #21268]
- Metot önbellek aramaları çoğu durumda kilitlemeyi önler
- Class (ve genel ivar) örnek değişken erişimi daha hızlıdır ve kilitlemeyi önler
- CPU önbellek çekişmesi, ractor başına bir sayaç kullanılarak nesne tahsisinde önlenir
- CPU önbellek çekişmesi, iş parçacığı yerel bir sayaç kullanılarak xmalloc/xfree’de önlenir
object_idçoğu durumda kilitlemeyi önler
- Hata düzeltmeleri ve kararlılık
- Ractor’lar ve Thread’leri birleştirirken olası kilitlenmeler düzeltildi
- Bir Ractor’da require ve autoload ile ilgili sorunlar düzeltildi
- Ractor’lar arasında kodlama/dönüştürme sorunları düzeltildi
- GC işlemlerinde ve metot geçersiz kılmada yarış koşulları düzeltildi
- Bir Ractor başlatıldıktan sonra çatallanma işlemleriyle ilgili sorunlar düzeltildi
- GC tahsis sayıları artık Ractor’lar altında doğrudur
- GC’den sonra TracePoint’lerin çalışmaması düzeltildi [Bug #19112]
JIT
- ZJIT
- Bir deneysel metot tabanlı JIT derleyicisi tanıtıldı.
Mevcut olduğunda, ZJIT çalışma zamanında
--zjitseçeneği ile veyaRubyVM::ZJIT.enableçağrılarak etkinleştirilebilir. Ruby oluştururken, ZJIT desteğini dahil etmek için Rust 1.85.0 veya daha yenisi gereklidir. - Ruby 4.0.0 itibariyle, ZJIT yorumlayıcıdan daha hızlıdır, ancak henüz YJIT kadar hızlı değildir. ZJIT ile deneme yapmanızı öneriyoruz, ancak şimdilik onu üretime dağıtmamanızı öneririz.
- Hedefimiz ZJIT’i YJIT’ten daha hızlı ve üretime hazır hale getirmek Ruby 4.1’de.
- Bir deneysel metot tabanlı JIT derleyicisi tanıtıldı.
Mevcut olduğunda, ZJIT çalışma zamanında
- YJIT
RubyVM::YJIT.runtime_statsratio_in_yjitartık varsayılan yapıda çalışmaz.--yjit-stats‘ta etkinleştirmek içinconfigure‘da--enable-yjit=statskullanın.- TracePoint tarafından her kod geçersiz kılındığında artırılan
invalidate_everythingvarsayılan istatistiklere eklendi.
RubyVM::YJIT.enable‘amem_size:vecall_threshold:seçenekleri eklendi.
- RJIT
--rjitkaldırıldı. Üçüncü taraf JIT API’sinin uygulamasını ruby/rjit deposuna taşıyacağız.
Daha fazla ayrıntı için NEWS veya commit loglarına bakın.
Bu değişikliklerle, Ruby 3.4.0’dan bu yana 3889 dosya değişti, 230769 ekleme(+), 297003 silme(-)!
Mutlu Noeller, Mutlu Yıllar ve Ruby 4.0 ile Mutlu Hackleme!
İndir
-
https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.0.tar.gz
BOYUT: 23955109 SHA1: 754e39e9ad122e1b6deaed860350bac133a35ed3 SHA256: 2e8389c8c072cb658c93a1372732d9eac84082c88b065750db1e52a5ac630271 SHA512: 688254e939b197d564e896fb951bc1abf07142f489e91c5ed0b11f68f52d6adb6b1f86616fe03f1f0bb434beeef7e75e158b9c616afb39bb34403b0b78d2ee19 -
https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.0.tar.xz
BOYUT: 18008368 SHA1: 05ec670e86f84325c5353ef2f2888e53b6adc602 SHA256: a72bacee9de07283ebc19baa4ac243b193129f21aa4e168c7186fb1fe7d07fe1 SHA512: 2d5b2e566eaf70a5f3ea6ce6afc0611c0415de58a41336ef7a0b855c9a91eda9aa790a5f8b48e40a1eb9d50f8ea0f687216e617f16c8d040a08474f3116518a4 -
https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.0.zip
BOYUT: 29253204 SHA1: 0b69f89d1d140157251c0d3a6032f6c45cdf81e8 SHA256: 70cb1bf89279b86ab9a975d504607c051fc05ee03e311d550a5541b65e373455 SHA512: a72e076ef618c0aeb9d20cf22e6fb12fda36809c0064ef0f98153b95a0bac257ef606342444a38f992c4594bf376a4d264686cf597463aa6f111220798784302
Ruby nedir
Ruby ilk olarak 1993 yılında Matz (Yukihiro Matsumoto) tarafından geliştirildi ve şimdi Açık Kaynak olarak geliştirilmektedir. Birçok platformda çalışır ve özellikle web geliştirme için tüm dünyada kullanılır.
Son Haberler
Ruby 3.2.10 Yayınlandı
Ruby 3.2.10 yayınlandı.
hsbt tarafından 14.01.2026 tarihinde gönderildi
Ruby 4.0.1 Yayınlandı
Ruby 4.0.1 yayınlandı.
k0kubun tarafından 13.01.2026 tarihinde gönderildi
2022 Fukuoka Ruby Ödül Yarışması - Girişler Matz tarafından yargılanacak
Sevgili Ruby Hayranları,
Fukuoka Ruby tarafından 03.08.2021 tarihinde gönderildi
Ruby 3.0.2 Yayınlandı
Ruby 3.0.2 yayınlandı.
nagachika tarafından 07.07.2021 tarihinde gönderildi