Ruby programlama dili 3.2'ın piyasaya sürülmesi

Program geliştirmede son derece verimli olan ve Perl, Java, Python, Smalltalk, Eiffel, Ada ve Lisp'in en iyi özelliklerini içeren dinamik bir nesne yönelimli programlama dili olan Ruby 3.2.0 piyasaya sürüldü. 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.

Ana iyileştirmeler:

  • Bir web tarayıcısında veya wasmtime gibi bağımsız çalışma zamanlarında çalıştırmak için WebAssembly ara kodunu derleyen CRuby yorumlayıcısının başlangıç ​​bağlantı noktası eklendi. Ayrı olarak çalıştırıldığında işletim sistemiyle doğrudan etkileşim için WASI (WebAssembly Sistem Arayüzü) API'si kullanılır. Diğer şeylerin yanı sıra, WASI'nin üzerinde, tüm Ruby uygulamasını tek bir wasm dosyası biçiminde bir sunum halinde paketlemenize olanak tanıyan bir VFS sarmalayıcısı sağlanır. Bir tarayıcıda çalıştırmak, TryRuby gibi eğitim ve demo web hizmetleri oluşturmak için kullanılabilir. Geliştirmenin mevcut aşamasında, bağlantı noktası, Thread API'sini kullanmayan temel ve önyükleme test paketlerini başarıyla geçmektedir. Bağlantı noktası ayrıca Fiberleri, istisnaları veya çöp toplamayı da desteklemez.
  • Shopify e-ticaret platformunun geliştiricileri tarafından Rails çerçevesini kullanan ve birçok yöntemi çağıran Ruby programlarının performansını artırmaya yönelik bir girişimin parçası olarak oluşturulan YJIT süreç içi JIT derleyicisinin kararlı ve kullanıma hazır olduğu bildirildi. üretim kullanımı. Daha önce kullanılan, tüm yöntemlerin işlenmesine dayanan ve C dilinde harici bir derleyici kullanan MJIT JIT derleyicisinden temel farkı, YJIT'in Lazy Basic Block Versioning (LBBV) kullanması ve entegre bir JIT derleyicisi içermesidir. LBBV ile JIT önce yöntemin yalnızca başlangıcını derler ve geri kalanını bir süre sonra, kullanılan değişken türleri ve bağımsız değişkenler yürütme sırasında belirlendikten sonra derler. YJIT, Linux, MacOS, BSD ve diğer UNIX platformlarında x86-64 ve arm64/aarch64 mimarileri için mevcuttur.

    Ruby'den farklı olarak, YJIT kodu Rust dilinde yazılmıştır ve derleme için Rustc 1.58.0+ derleyicisini gerektirir, dolayısıyla YJIT yapısı varsayılan olarak devre dışıdır ve isteğe bağlıdır. YJIT kullanıldığında, yorumlama kullanımına kıyasla yjit-bench testini çalıştırırken performansta %41'lik bir artış kaydedildi.

    Ruby programlama dili 3.2'ın piyasaya sürülmesi

  • Verimsiz ve zaman alıcı normal ifadelerde (ReDoS) harici veriler işlenirken hizmet reddi saldırılarına karşı ek koruma eklendi. Ezberleme tekniğini kullanan eşleştirme algoritması önemli ölçüde iyileştirildi. Örneğin, '/^a*b?a*$/ =~ “a” * 50000 + “x”' ifadesinin yürütme süresi 10 saniyeden 0.003 saniyeye düşürüldü. Optimizasyon maliyeti, tüketimi giriş verilerinin boyutundan yaklaşık 10 kat daha fazla olan bellek tüketimindeki artıştır. İkinci güvenlik önlemi, normal ifadenin işlenmesi gereken bir zaman aşımı (örneğin, "Regexp.timeout = 1.0") tanımlama yeteneğidir.
  • Eksik veya fazladan bir kapanış "son" ifadesi ile ilişkili hataların nedenlerinin teşhis edilmesine yardımcı olan syntax_suggest modu dahil edilmiştir. Eşleşmeyen "son", eksik anahtar kelime ("do", "def", "if" vb.)? 1 sınıf Köpek > 2 havlama > 3 son 4 son
  • Türler ve bağımsız değişkenlerle ilgili hatalar için bağımsız değişkenleri işaretleme yeteneği, hata konumu görüntüleme moduna eklenmiştir, örneğin: test.rb:2:in `+': nil, Tamsayı (TypeError) sum = ary'ye zorlanamaz [0] + herhangi bir [1] ^^^^^^
  • Bağımsız değişken kümelerini diğer yöntemlere yönlendirmek için yeni sözdizimi eklendi: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler önerildi - eski MJIT JIT derleyicisinin Ruby dilinde yeniden yazılmış bir çeşidi. MJIT'in bir MJIT çalışan iş parçacığında çalıştırmak yerine ayrı bir işlemde çalışması sağlandı.
  • Bundler 2.4'te bağımlılık işleme, Dart dili için pub paket yöneticisinde de kullanılan PubGrub sürüm algılayıcısını kullanır. Daha önce kullanılan Molinillo algoritması RubyGems'te kullanılmaya devam ediyor ancak gelecekte yerini PubGrub da alacak.
  • Yerleşik gem modüllerinin ve standart kitaplıkta bulunanların güncellenmiş sürümleri.

Kaynak: opennet.ru

Yorum ekle