naruse tarafından 25.12.2018 tarihinde gönderildi
Çeviri: İsmail Arılık
Ruby 2.6.0’ın yayınlanmasını duyurmaktan memnuniyet duyarız.
Bu sürüm birkaç yeni özellik ve performans artışı getirmektedir, en önemlileri:
- Yeni bir JIT derleyicisi.
RubyVM::AbstractSyntaxTree
modülü.
JIT [Deneysel]
Ruby 2.6 bir JIT (Just-In-Time) derleyicisinin ilk gerçeklemesini barındırmaktadır.
JIT derleyicisi, Ruby programlarının performansını iyileştirmeyi amaçlamaktadır. İşlem içinde çalışan geleneksel JIT derleyicilerinin aksine, Ruby’nin JIT derleyicisi, C kodunu diske yazar ve yerel kod oluşturmak için yaygın bir C derleyicisini ortaya çıkarır. Bununla ilgili daha fazla ayrıntı için, Vladimir Makarov’un MJIT organizasyonuna bakın.
JIT derleyicisini etkinleştirmek için, komut satırında ya da $RUBYOPT
çevre değişkeninde --jit
‘i belirtin.
--jit-verbose=1
‘i belirtmek, JIT derleyicisinin ek bilgileri yazdırmasına neden olacaktır.
Diğer seçenekler için ruby --help
‘in çıktısını ya da belgelendirmeyi okuyun.
JIT derleyicisi, Ruby, çalışma zamanında var olması gereken GCC, Clang, ya da Microsoft VC++ ile inşa edildiğinde desteklenir.
Ruby 2.6.0 itibariyle, Optcarrot isimli CPU yoğunluklu, basit olmayan bir kıyaslamada Ruby 2.5’e göre 1.7 kat hızlı performans başardık. Fakat, bu hala deneysel ve şu anda Rails uygulamaları gibi birçok diğer hafıza yoğunluklu iş yükleri bundan faydalanamayabilir. Daha fazla ayrıntı için, Ruby 2.6 JIT - İlerleme ve Gelecek‘e bakın.
Ruby’nin performansının yeni çağı için takipte kalın.
RubyVM::AbstractSyntaxTree
[Deneysel]
Ruby 2.6 RubyVM::AbstractSyntaxTree
modülünü tanıtır.
Bu modülün gelecek uyumlulukları garanti değildir.
Bu modül bir parse
metoduna sahiptir, bu metod verilen karakter dizisini Ruby kodu olarak ayrıştırır ve kodun AST (Abstract Syntax Tree) düğümlerini döndürür.
parse_file
metodu verilen dosyayı Ruby kodu olarak açar ve ayrıştırır ve AST düğümlerini döndürür.
RubyVM::AbstractSyntaxTree::Node
sınıfı ayrıca tanıtılır.
Node
nesnelerinden kaynak konumu ve çocuk düğümlerini alabilirsiniz.
Bu özellik deneyseldir.
Dikkate Değer Diğer Yeni Özellikler
-
#then
ismindeKernel#yield_self
için bir takma ad eklenmesi. [Özellik #14594] -
Sabit isimleri ASCII olmayan bir büyük harf ile başlayabilir. [Özellik #13770]
-
Sonsuz aralıkların tanıtılması. [Özellik #12912]
Bir sonsuz aralık,
(1..)
, sonu yokmuş gibi çalışır. İşte bazı tipik kullanım durumları:ary[1..] # sihirli -1 olmadan ary[1..-1] ile aynıdır (1..).each {|index| ... } # 1 dizininden başlayarak değerleri numaralandırır ary.zip(1..) {|elem, index| ... } # ary.each.with_index(1) { ... }
-
Enumerable#chain
veEnumerator#+
‘yı ekle. [Özellik #15144] -
Proc
veMethod
‘a<<
ve>>
fonksiyon birleştirme operatörlerini ekle. [Özellik #6284]f = proc{|x| x + 2} g = proc{|x| x * 3} (f << g).call(3) # -> 11; f(g(3)) ile aynıdır (f >> g).call(3) # -> 15; g(f(3)) ile aynıdır
-
Binding#source_location
‘ı ekle. [Özellik #14230]Bu metod, bağlayıcının kaynak konumunu döndürür, bu,
__FILE__
ve__LINE__
‘ın 2 öğeli bir dizisidir. Teknik olarak konuşursak, bu,eval("[__FILE__, __LINE__]", binding)
ile aynıdır. Fakat, bu davranışı,Kernel#eval
‘in bağlayıcının kaynak konumunu boşvereceği şekilde değiştirmeyi planlıyoruz [Hata #4352]. Yani,Kernel#eval
yerineBinding#source_location
kullanılması tavsiye edilir. -
Kernel#system
‘e birexception:
seçeneği eklenmesi, bu özellik başarısızlık durumundafalse
döndürülmesi yerine bir istisna yükseltilmesine neden olur. [Özellik #14386] -
Coverage
‘a bir tek atış modu eklenmesi. [Özellik#15022]- Bu mod, “her satırın kaç kere çalıştığı” yerine “her satırın en az bir kere çalışıp çalışmadığını” kontrol eder. Her satır için bir kanca sadece bir kez ateşlenir, ve bu ateşlendiği zaman, kanca bayrağı silinecektir, yani bu kanca sıfır ek yük ile çalışır.
Coverage.start
‘aoneshot_lines:
anahtar kelime argümanı eklenmesi.Coverage.result
‘astop:
veclear:
anahtar kelime argümanları eklenmesi. Eğerclear
doğruysa, sayıcılar sıfır olarak ayarlanır. Eğerstop
doğruysa, kapsama ölçümü devre dışı bırakılır.Coverage.line_stub
, verilen bir kaynak koddan satır kapsamasının “stub”ını oluşturan basit bir yardımcı fonksiyondur.
-
FileUtils#cp_lr
‘nin eklenmesi. Bu, aynıcp_r
gibi çalışır fakat kopyalama yerine bağlar. [Özellik #4189]
Performans iyileştirmeleri
-
$SAFE
için olan geçici yer ayrımı kaldırılarakProc#call
‘un hızlandırılması. [Özellik #14318]Proc#call
‘u sayısız kere çağıranlc_fizzbuzz
kıyaslamasında 1.4 kat performans iyileştirmesi gözlemledik. [Hata #10212] -
block
bir blok parametresi olarak geçirildiğindeblock.call
‘un hızlandırılması. [Özellik #14330]Ruby 2.5’te tanıtılan blok ele alımı etrafındaki iyileştirmelerle birleştirince, blok değerlendirmesi şimdi Ruby 2.6’daki bir küçük kıyaslamada 2.6 kat daha hızlı yapılır. [Özellik #14045]
-
Geçici heap (
theap
) tanıtılır. [Hata #14858] [Özellik #14989]theap
, belirli sınıflar (Array
,Hash
,Object
, veStruct
) tarafından işaret edilen kısa yaşayan hafıza nesneleri için yönetilen bir heap’tir. Küçük ve kısa yaşayan Hash nesneleri yapmak 2 kat hızlıdır. rdoc kıyaslaması ile %6-7 performans artışı gözlemledik. -
Fiber’in bağlam değiştirme performansını dikkate değer bir şekilde iyileştirmek için eşyordamların yerel gerçeklemeleri (
arm32
,arm64
,ppc64le
,win32
,win64
,x86
,amd64
) yapıldı. [Özellik #14739]64-bit Linux’te
Fiber.yield
veFiber#resume
yaklaşık olarak 5 kat daha hızlıdır. Fiber yoğunluklu programlar tümünde %5’e kadar iyileşme bekleyebilir.
2.5’ten beri diğer dikkate değer değişiklikler
-
$SAFE
şimdi bir işlem evrensel durumu ve0
‘a geri ayarlanabilir. [Özellik #14250] -
ERB.new
‘esafe_level
geçirmek kullanımdan kaldırıldı.trim_mode
veeoutvar
argümanları anahtar kelime argümanlarına çevrildi. [Özellik #14256] -
Unicode desteği sürüm 11’e güncellendi. Ruby 2.6’nın gelecek UFACIK bir sürümünde Unicode sürümü 12 ve 12.1 için destek ekleme planlarımız var. Bu, yeni Japon dönemi için destek içerecek.
-
RubyGems 3.0.1’i birleştir.
--ri
ve--rdoc
seçenekleri silindi. Lütfen bunlar yerine--document
ve--no-document
seçeneklerini kullanın. -
Bundler şimdi varsayılan bir gem olarak kuruluyor.
-
İstisna işleme bloklarında,
rescue
olmadanelse
şimdi bir sözdizimi hatasına neden oluyor. [DENEYSEL][Özellik #14606]
Daha fazla ayrıntı için NEWS‘e ya da işleme loglarına bakın.
Bu değişiklikler ile, Ruby 2.5.0’dan beri 6437 dosya değişti, 231471 ekleme yapıldı(+), 98498 silme yapıldı(-)!
Mutlu Noeller, Mutlu Tatiller, ve Ruby 2.6 ile programlamanın keyfini çıkarın!
Bilinen Problem
(Bu bölüm 28 Ocak 2019’da eklendi.)
İndirin
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz
SIZE: 16687800 bytes SHA1: c95f4e86e21390270dad3ebb94491fd42ee2ce69 SHA256: f3c35b924a11c88ff111f0956ded3cdc12c90c04b72b266ac61076d3697fc072 SHA512: 01f886b0c0782a06315c4a46414e9f2b66ee634ba4349c8e0697f511793ae3c56d2ad3cad6563f2b0fdcedf0ff3eba51b9afab907e7e1ac243475772f8688382
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.zip
SIZE: 20582054 bytes SHA1: a804e63d18da12107e1d101918a3d8f4c5462a27 SHA256: 8a4fb6ca58202495c9682cb88effd804398bd0ef023e3e36f001ca88d8b5855a SHA512: 16d66ec4a2c6a2e928d5b50e094a5efa481ac6e4d5ed77459d351ef19fe692aa59b68307e3e25229eec5f30ae2f9adae2663bafe9c9d44bfb45d3833d77839d4
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.bz2
SIZE: 14585856 bytes SHA1: b8638eb806efbf7b6af87b24ccc6ad915f262318 SHA256: c89ca663ad9a6238f4b1ec4d04c7dff630560c6e6eca6d30857c4d394f01a599 SHA512: ca3daf9acf11d3db2900af21b66231bd1f025427a9d2212b35f6137ca03f77f57171ddfdb99022c8c8bcd730ff92a7a4af54e8a2a770a67d8e16c5807aa391f1
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.xz
SIZE: 11918536 bytes SHA1: 9ddaeba3505d2855460c8c653159fc0ac8928c0f SHA256: acb00f04374899ba8ee74bbbcb9b35c5c6b1fd229f1876554ee76f0f1710ff5f SHA512: c56eaf85ef7b79deb34ee4590b143c07f4fc83eb79775290761aee5a7c63374659613538a41f25706ed6e19e49d5c67a1014c24d17f29948294c7abd0b0fcea8