|
| 1 | +--- |
| 2 | +layout: news_post |
| 3 | +title: "Ruby 2.6.0 Yayınlandı" |
| 4 | +author: "naruse" |
| 5 | +translator: "İsmail Arılık" |
| 6 | +date: 2018-12-25 00:00:00 +0000 |
| 7 | +lang: tr |
| 8 | +--- |
| 9 | + |
| 10 | +Ruby 2.6.0'ın sürümünü duyurmaktan memnuniyet duyarız. |
| 11 | + |
| 12 | +Bu sürüm birkaç yeni özellik ve performans artışı getirmektedir, en önemlileri: |
| 13 | + |
| 14 | + * Yeni bir JIT derleyicisi. |
| 15 | + * `RubyVM::AbstractSyntaxTree` modülü. |
| 16 | + |
| 17 | +## JIT [Deneysel] |
| 18 | + |
| 19 | +Ruby 2.6 bir JIT (Just-In-Time) derleyicisinin ilk uygulamasını barındırmaktadır. |
| 20 | + |
| 21 | +JIT derleyicisi, Ruby programlarının performansını iyileştirmeyi amaçlamaktadır. |
| 22 | +İş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. |
| 23 | +Bununla ilgili daha fazla ayrıntı için, [Vladimir Makarov'un MJIT organizasyonu](https://bugs.ruby-lang.org/projects/ruby/wiki/MJIT#MJIT-organization)na bakın. |
| 24 | + |
| 25 | +JIT derleyicisini etkinleştirmek için, komut satırında ya da `$RUBYOPT` çevre değişkeninde `--jit`'i belirtin. |
| 26 | +`--jit-verbose=1`'i belirtmek, JIT derleyicisinin ek bilgileri yazdırmasına neden olacaktır. |
| 27 | +Diğer seçenekler için `ruby --help`'in çıktısını ya da [belgelendirme](https://bugs.ruby-lang.org/projects/ruby/wiki/MJIT#Basic-usage)yi okuyun. |
| 28 | + |
| 29 | +JIT derleyicisi, Ruby, çalışma zamanında var olması gereken GCC, Clang, ya da Microsoft VC++ ile inşa edildiğinde desteklenir. |
| 30 | + |
| 31 | +Ruby 2.6.0 itibariyle, [Optcarrot](https://github.com/mame/optcarrot) isimli CPU yoğunluklu, basit olmayan bir kıyaslamada Ruby 2.5'e göre [1.7 kat hızlı performans](https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208) başardık. |
| 32 | +Fakat, bu hala deneysel ve şu anda Rails uygulamaları gibi birçok diğer hafıza yoğunluklu iş yükleri bundan faydalanamayabilir. |
| 33 | +Daha fazla ayrıntı için, [Ruby 2.6 JIT - İlerleme ve Gelecek](https://medium.com/@k0kubun/ruby-2-6-jit-progress-and-future-84e0a830ecbf)'e bakın. |
| 34 | + |
| 35 | +Ruby'nin performansının yeni çağı için takipte kalın. |
| 36 | + |
| 37 | +## `RubyVM::AbstractSyntaxTree` [Deneysel] |
| 38 | + |
| 39 | +Ruby 2.6 `RubyVM::AbstractSyntaxTree` modülünü tanıtır. |
| 40 | +**Bu modülün gelecek uyumlulukları garanti değildir**. |
| 41 | + |
| 42 | +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. |
| 43 | +`parse_file` metodu verilen dosyayı Ruby kodu olarak açar ve ayrıştırır ve AST düğümlerini döndürür. |
| 44 | + |
| 45 | +`RubyVM::AbstractSyntaxTree::Node` sınıfı ayrıca tanıtılır. |
| 46 | +`Node` nesnelerinden kaynak konumu ve çocuk düğümlerini alabilirsiniz. |
| 47 | +Bu özellik deneyseldir. |
| 48 | + |
| 49 | +## Dikkate Değer Diğer Yeni Özellikler |
| 50 | + |
| 51 | +* `#then` isminde `Kernel#yield_self` için bir takma ad eklenmesi. |
| 52 | + [[Özellik #14594]](https://bugs.ruby-lang.org/issues/14594) |
| 53 | + |
| 54 | +* Sabit isimleri ASCII olmayan bir büyük harf ile başlayabilir. |
| 55 | + [[Özellik #13770]](https://bugs.ruby-lang.org/issues/13770) |
| 56 | + |
| 57 | +* Sonsuz aralıkların tanıtılması. |
| 58 | + [[Özellik #12912]](https://bugs.ruby-lang.org/issues/12912) |
| 59 | + |
| 60 | + Bir sonsuz aralık, `(1..)`, sonu yokmuş gibi çalışır. |
| 61 | + İşte bazı tipik kullanım durumları: |
| 62 | + |
| 63 | + ary[1..] # sihirli -1 olmadan ary[1..-1] ile aynıdır |
| 64 | + (1..).each {|index| ... } # 1 dizininden başlayarak değerleri numaralandırır |
| 65 | + ary.zip(1..) {|elem, index| ... } # ary.each.with_index(1) { ... } |
| 66 | + |
| 67 | +* `Enumerable#chain` ve `Enumerator#+`'yı ekle. |
| 68 | + [[Özellik #15144]](https://bugs.ruby-lang.org/issues/15144) |
| 69 | + |
| 70 | +* `Proc` ve `Method`'a `<<` ve `>>` fonksiyon birleştirme operatörlerini ekle. |
| 71 | + [[Özellik #6284]](https://bugs.ruby-lang.org/issues/6284) |
| 72 | + |
| 73 | + f = proc{|x| x + 2} |
| 74 | + g = proc{|x| x * 3} |
| 75 | + (f << g).call(3) # -> 11; f(g(3)) ile aynıdır |
| 76 | + (f >> g).call(3) # -> 15; g(f(3)) ile aynıdır |
| 77 | + |
| 78 | +* `Binding#source_location`'ı ekle. |
| 79 | + [[Özellik #14230]](https://bugs.ruby-lang.org/issues/14230) |
| 80 | + |
| 81 | + Bu metod bağlayıcının kaynak konumunu döndürür, bu, `__FILE__` ve `__LINE__`'ın 2 öğeli bir dizisidir. |
| 82 | + Teknik olarak konuşursak, bu, `eval("[__FILE__, __LINE__]", binding)` ile aynıdır. |
| 83 | + Fakat, bu davranışı, `Kernel#eval`'in bağlayıcının kaynak konumunu boşvereceği şekilde değiştirmeyi planlıyoruz [[Hata #4352]](https://bugs.ruby-lang.org/issues/4352). |
| 84 | + Yani, `Kernel#eval` yerine `Binding#source_location` kullanılması tavsiye edilir. |
| 85 | + |
| 86 | +* `Kernel#system`'e bir `exception:` seçeneği eklenmesi, bu özellik başarısızlık durumunda `false` döndürülmesi yerine bir istisna yükseltilmesine neden olur. |
| 87 | + [[Özellik #14386]](https://bugs.ruby-lang.org/issues/14386) |
| 88 | + |
| 89 | +* `Coverage`'a bir tek atış modu eklenmesi. |
| 90 | + [[Özellik#15022]](https://bugs.ruby-lang.org/issues/15022) |
| 91 | + |
| 92 | + * 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. |
| 93 | + 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. |
| 94 | + * `Coverage.start`'a `oneshot_lines:` anahtar kelime argümanı eklenmesi. |
| 95 | + * `Coverage.result`'a `stop:` ve `clear:` anahtar kelime argümanları eklenmesi. |
| 96 | + Eğer `clear` doğruysa, sayıcılar sıfır olarak ayarlanır. |
| 97 | + Eğer `stop` doğruysa, kapsama ölçümü devre dışı bırakılır. |
| 98 | + * `Coverage.line_stub`, verilen bir kaynak koddan satır kapsamasının "stub"ını oluşturan basit bir yardımcı fonksiyondur. |
| 99 | + |
| 100 | +* `FileUtils#cp_lr`'nin eklenmesi. |
| 101 | + Bu, aynı `cp_r` gibi çalışır fakat kopyalama yerine bağlar. |
| 102 | + [[Özellik #4189]](https://bugs.ruby-lang.org/issues/4189) |
| 103 | + |
| 104 | +## Performans iyileştirmeleri |
| 105 | + |
| 106 | +* `$SAFE` için olan geçici yer ayrımı kaldırılarak `Proc#call`'un hızlandırılması. |
| 107 | + [[Özellik #14318]](https://bugs.ruby-lang.org/issues/14318) |
| 108 | + |
| 109 | + `Proc#call`'u sayısız kere çağıran `lc_fizzbuzz` kıyaslamasında 1.4 kat performans iyileştirmesi gözlemledik. |
| 110 | + [[Hata #10212]](https://bugs.ruby-lang.org/issues/10212) |
| 111 | + |
| 112 | +* `block` bir blok parametresi olarak geçirildiğinde `block.call`'un hızlandırılması. |
| 113 | + [[Özellik #14330]](https://bugs.ruby-lang.org/issues/14330) |
| 114 | + |
| 115 | + 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. |
| 116 | + [[Özellik #14045]](https://bugs.ruby-lang.org/issues/14045) |
| 117 | + |
| 118 | +* Geçici yığın (`theap`) tanıtılır. |
| 119 | + [[Hata #14858]](https://bugs.ruby-lang.org/issues/14858) |
| 120 | + [[Özellik #14989]](https://bugs.ruby-lang.org/issues/14989) |
| 121 | + |
| 122 | + `theap`, belirli sınıflar (`Array`, `Hash`, `Object`, ve `Struct`) tarafından işaret edilen kısa yaşayan hafıza nesneleri için yönetilen bir yığındır. |
| 123 | + Küçük ve kısa yaşayan Hash nesneleri yapmak 2 kat hızlıdır. |
| 124 | + rdoc kıyaslaması ile %6-7 performans artışı gözlemledik. |
| 125 | + |
| 126 | +* 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ı. |
| 127 | + [[Özellik #14739]](https://bugs.ruby-lang.org/issues/14739) |
| 128 | + |
| 129 | + 64-bit Linux'te `Fiber.yield` ve `Fiber#resume` yaklaşık olarak 5 kat daha hızlıdır. |
| 130 | + Fiber yoğunluklu programlar tümünde %5'e kadar iyileşme bekleyebilir. |
| 131 | + |
| 132 | +## 2.5'ten beri diğer dikkate değer değişiklikler |
| 133 | + |
| 134 | +* `$SAFE` şimdi bir işlem evrensel durumu ve `0`'a geri ayarlanabilir. |
| 135 | + [[Özellik #14250]](https://bugs.ruby-lang.org/issues/14250) |
| 136 | + |
| 137 | +* `ERB.new`'e `safe_level` geçirmek kullanımdan kaldırıldı. |
| 138 | + `trim_mode` and `eoutvar` argümanları anahtar kelime argümanlarına çevrildi. |
| 139 | + [[Özellik #14256]](https://bugs.ruby-lang.org/issues/14256) |
| 140 | + |
| 141 | +* Unicode desteği sürüm 11'e güncellendi. |
| 142 | + 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. |
| 143 | + Bu, [yeni Japon dönemi](http://blog.unicode.org/2018/09/new-japanese-era.html) için destek içerecek. |
| 144 | + |
| 145 | +* RubyGems 3.0.1'i birleştir. |
| 146 | + `--ri` ve `--rdoc` seçenekleri silindi. |
| 147 | + Lütfen bunlar yerine `--document` ve `--no-document` seçeneklerini kullanın. |
| 148 | + |
| 149 | +* [Bundler](https://github.com/bundler/bundler) şimdi varsayılan bir gem olarak kuruluyor. |
| 150 | + |
| 151 | +* İstisna işleme bloklarında, `rescue` olmadan `else` şimdi bir sözdizimi hatasına neden oluyor. |
| 152 | + [DENEYSEL][[Özellik #14606]](https://bugs.ruby-lang.org/issues/14606) |
| 153 | + |
| 154 | +Daha fazla ayrıntı için [NEWS](https://github.com/ruby/ruby/blob/v2_6_0/NEWS)'e ya da [işleme logları](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0)na bakın. |
| 155 | + |
| 156 | +Bu değişiklikler ile, Ruby 2.5.0'dan beri [6437 dosya değişti, 231471 ekleme yapıldı(+), 98498 silme yapıldı(-)](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0)! |
| 157 | + |
| 158 | +Mutlu Noeller, Mutlu Tatiller, ve Ruby 2.6 ile programlamanın keyfini çıkarın! |
| 159 | + |
| 160 | +## Bilinen Problem |
| 161 | + |
| 162 | +_(Bu bölüm 28 Ocak 2019'da eklendi.)_ |
| 163 | + |
| 164 | +* [Büyük çok baytlı karakter dizileri gönderirken Net::Protocol::BufferedIO#write, NoMethodError yükseltiyor](https://github.com/ruby/ruby/pull/2058) |
| 165 | + |
| 166 | +## İndirin |
| 167 | + |
| 168 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz> |
| 169 | + |
| 170 | + BOYUT: 16687800 bytes |
| 171 | + SHA1: c95f4e86e21390270dad3ebb94491fd42ee2ce69 |
| 172 | + SHA256: f3c35b924a11c88ff111f0956ded3cdc12c90c04b72b266ac61076d3697fc072 |
| 173 | + SHA512: 01f886b0c0782a06315c4a46414e9f2b66ee634ba4349c8e0697f511793ae3c56d2ad3cad6563f2b0fdcedf0ff3eba51b9afab907e7e1ac243475772f8688382 |
| 174 | + |
| 175 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.zip> |
| 176 | + |
| 177 | + BOYUT: 20582054 bytes |
| 178 | + SHA1: a804e63d18da12107e1d101918a3d8f4c5462a27 |
| 179 | + SHA256: 8a4fb6ca58202495c9682cb88effd804398bd0ef023e3e36f001ca88d8b5855a |
| 180 | + SHA512: 16d66ec4a2c6a2e928d5b50e094a5efa481ac6e4d5ed77459d351ef19fe692aa59b68307e3e25229eec5f30ae2f9adae2663bafe9c9d44bfb45d3833d77839d4 |
| 181 | + |
| 182 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.bz2> |
| 183 | + |
| 184 | + BOYUT: 14585856 bytes |
| 185 | + SHA1: b8638eb806efbf7b6af87b24ccc6ad915f262318 |
| 186 | + SHA256: c89ca663ad9a6238f4b1ec4d04c7dff630560c6e6eca6d30857c4d394f01a599 |
| 187 | + SHA512: ca3daf9acf11d3db2900af21b66231bd1f025427a9d2212b35f6137ca03f77f57171ddfdb99022c8c8bcd730ff92a7a4af54e8a2a770a67d8e16c5807aa391f1 |
| 188 | + |
| 189 | +* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.xz> |
| 190 | + |
| 191 | + BOYUT: 11918536 bytes |
| 192 | + SHA1: 9ddaeba3505d2855460c8c653159fc0ac8928c0f |
| 193 | + SHA256: acb00f04374899ba8ee74bbbcb9b35c5c6b1fd229f1876554ee76f0f1710ff5f |
| 194 | + SHA512: c56eaf85ef7b79deb34ee4590b143c07f4fc83eb79775290761aee5a7c63374659613538a41f25706ed6e19e49d5c67a1014c24d17f29948294c7abd0b0fcea8 |
0 commit comments