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

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.

Ana iyileştirmeler:

  • 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.

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

  • 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.

    def foo(anahtar: 42); son; foo({key: 42}) # uyarıldı
    def foo(**kw); son; foo({anahtar: 42}) #warned
    def foo(anahtar: 42); son; foo(**{anahtar: 42}) # Tamam
    def foo(**kw); son; foo(**{anahtar: 42}) # Tamam

    def foo(h, **kw); son; foo(anahtar: 42) # uyarıldı
    def foo(h, anahtar: 42); son; foo(anahtar: 42) # uyarıldı
    def foo(h, **kw); son; foo({anahtar: 42}) # Tamam
    def foo(h, anahtar: 42); son; foo({anahtar: 42}) # Tamam

    def foo(h={}, anahtar: 42); son; foo("anahtar" => 43, anahtar: 42) # uyarıldı
    def foo(h={}, anahtar: 42); son; foo({"anahtar" => 43, anahtar: 42}) # uyarıldı
    def foo(h={}, anahtar: 42); son; foo({"anahtar" => 43}, anahtar: 42) # Tamam

    def foo(opt={}); son; foo( tuş: 42 ) # Tamam

    def foo(h, **nil); son; foo(anahtar: 1) #ArgumentError
    def foo(h, **nil); son; foo(**{anahtar: 1}) # ArgumentError
    def foo(h, **nil); son; foo("str" ​​=> 1) # ArgumentError
    def foo(h, **nil); son; foo({anahtar: 1}) # Tamam
    def foo(h, **nil); son; foo({"str" ​​=> 1}) # Tamam

    sa = {}; def foo(*a) bir son; foo(**h) # [] h = {}; def foo(a) bir son; foo(**h) # {} ve uyarı
    sa = {}; def foo(*a) end; foo(h) # [{}] h = {}; def foo(a) bir son; foo(h) # {}

  • Fırsat blok parametreleri için varsayılan olarak numaralı değişken adlarının kullanılması.

    [1, 2, 3].her biri { @1 koyar } # gibi [1, 2, 3].her biri { |i| koyarım}

  • Başlangıç ​​değeri olmayan aralıklar için deneysel destek.

    ary[..3] # ary[0..3] ile aynı rel.where(satış: ..100)

  • Her öğenin kaç kez oluştuğunu sayan Enumerable#tally yöntemi eklendi.

    ["a", "b", "c", "b"].taklit
    #=> {“a”=>1, “b”=>2, “c”=>1}

  • 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;

  • Kütüphaneler temel paketten harici gem paketlerine taşındı
    CMath (cmath mücevheri),
    Scanf (scanf mücevheri),
    Kabuk (kabuk taşı),
    Senkronize edici (senkronizasyon taşı),
    ThreadsWait (gecikme mücevheri),
    E2MM (e2mmap mücevheri).

  • Varsayılan stdlib modülleri rubygems.org'da yayınlanmaktadır:
    kalite Testi,
    cgi,
    temsilci,
    getoptlong,
    net pop,
    net-smtp
    açık3,
    mağaza,
    tekil. Monitör modülleri rubygems.org'a taşınmadı
    gözlemci,
    zaman aşımı,
    izleyici,
    nefret,
    yaml, yalnızca ruby-core olarak sağlanır.

  • Ruby oluşturmak artık C99 standardını destekleyen bir C derleyicisi gerektiriyor.

Kaynak: opennet.ru

Yorum ekle