Bir yıllık geliştirmenin ardından yayınlanan serbest Ruby 2.7.0Program geliştirmede son derece verimli olan ve Perl, Java, Python, Smalltalk, Eiffel, Ada ve Lisp'in en iyi özelliklerini içeren dinamik, nesne yönelimli bir programlama dilidir. Proje kodu, GPL lisansının en son sürümünü ifade eden ve GPLv2 ile tamamen uyumlu olan BSD (“3 maddeli BSDL”) ve “Ruby” lisansları altında dağıtılmaktadır. Ruby 2.7, işlevsel iyileştirmelerin hazırlanmasının bir yıl sürdüğü ve her 2-3 ayda bir bakım sürümleri üreten planlı bir geliştirme sürecinin ardından gelen yedinci büyük sürümdür.
Deneysel destek desen eşleştirme (Örüntü eşleme), belirli bir nesne üzerinde yineleme yapmanıza ve kalıpla eşleşme olması durumunda bir değer atamanıza olanak tanır.
durum [0, [1, 2, 3]], [a, [b, *c]] pa #=> 0
pb #=> 1
pc #=> [2, 3] sonu
durum {a: 0, b: 1}
{a: 0, x: 1}'de
:kullanım dışı
{a: 0, b: var}'da
p var #=> 1
son
Etkileşimli hesaplamalar irb'nin (REPL, Read-Eval-Print-Loop) kabuğu artık okuma satırı uyumlu bir kitaplık kullanılarak uygulanan çok satırlı düzenleme özelliğine sahiptir yeniden çizmek, Ruby'de yazılmıştır. irb'de belirtilen sınıflar, modüller ve yöntemler hakkındaki referans bilgilerinin görüntülenmesine olanak tanıyan rdoc desteği entegre edilmiştir. Binding#irb aracılığıyla gösterilen kodlu satırların renkli vurgulanması ve temel sınıf nesnelerinin incelenmesinin sonuçları sağlanır.
Bazı çok iş parçacıklı Ruby uygulamalarında meydana gelen bellek parçalanmasının neden olduğu performans ve bellek tüketimi sorunlarını çözerek, belleğin bir bölgesini birleştirebilen kompakt bir çöp toplayıcı (Sıkıştırma GC) eklendi. Yığındaki nesneleri paketlemek için önerilen Kullanılan bellek sayfalarının sayısını azaltmak ve yığını işlemler için optimize etmek için GC.compact yöntemi
CoW (yazarken kopyala).
Gerçekleştirillen Argümanları liste konumuna (“def foo(a,b,c)”) ve anahtar kelimelere (“def foo(key: val)”) göre ayırmaya hazırlanıyor. Anahtar kelimelere ve konuma dayalı otomatik bağımsız değişken dönüşümü kullanımdan kaldırılmıştır ve Ruby 3.0 dalında desteklenmeyecektir. Özellikle, son argümanın anahtar kelime parametreleri olarak kullanılması, anahtar kelimeye dayalı argümanların son karma parametresi olarak aktarılması ve son argümanın konumsal ve anahtar kelime parametrelerine bölünmesi kullanımdan kaldırılmıştır.
Kelimenin tam anlamıyla "self" ile özel bir yöntemin çağrılmasına izin verildi
kesinlikle foo
son
özel :foo
self.foo
Tembel (Enumerator::Lazy) numaralandırmadan düzenli numaralandırma oluşturmak için Enumerator::Lazy#eager yöntemi eklendi.
a = %w(foo bar baz)
e = a.tembel.harita {|x| x.upcase }.map {|x| x + "!" }.istekli
p e.sınıf #=> Numaralandırıcı
p e.harita {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
Ruby dilindeki uygulamaların performansını önemli ölçüde artırabilecek deneysel bir JIT derleyicisinin geliştirilmesine devam edilmiştir. Ruby'nin JIT derleyicisi önce C kodunu diske yazar ve ardından makine talimatlarını oluşturmak için harici bir C derleyicisini çağırır (GCC, Clang ve Microsoft VC++ çağrısını destekler). Yeni sürüm, gerektiğinde satır içi dağıtım için bir yöntem uyguluyor, derleme sırasında optimizasyon modlarının seçici olarak uygulanması sağlanıyor, "--jit-min-calls" varsayılan değeri 5'ten 10000'e yükseltiliyor ve "--jit-max-" önbellek” 1000'den 100'e.
CGI.escapeHTML, Monitor ve MonitorMixin'in performansı iyileştirildi.
Modül#adı, true.to_s, false.to_s ve nil.to_s, belirtilen nesne için değişmeden bir dizenin döndürülmesini sağlar.
RubyVM::InstructionSequence#to_binary yöntemi tarafından oluşturulan ikili dosyaların boyutu azaltıldı;
Dahil olmak üzere yerleşik bileşenlerin güncellenmiş sürümleri
Paketleyici 2.1.2, RubyGems 3.1.2,
Racc 1.4.15,
CSV 3.1.2, REXML 3.2.3,
RSS 0.2.8,
StringScanner'ın 1.0.3;