Ngaleupaskeun basa programming Ruby 2.7.0

Sanggeus sataun pangwangunan diterbitkeun ngabebaskeun Ruby 2.7.0, basa programming obyék-berorientasi dinamis anu kacida efisien dina ngembangkeun program sarta incorporates fitur pangalusna tina Perl, Java, Python, Smalltalk, Eiffel, Ada na Lisp. Kodeu proyék disebarkeun dina lisénsi BSD ("2-klausa BSDL") sareng "Ruby", anu nujul kana versi panganyarna tina lisénsi GPL sareng sapinuhna cocog sareng GPLv3. Ruby 2.7 mangrupikeun sékrési utama katujuh anu diproduksi salaku bagian tina prosés pangembangan anu direncanakeun anu kalebet nyéépkeun sataun kanggo paningkatan fitur sareng pelepasan patch 2-3 bulan.

utama pamutahiran:

  • ékspériméntal sokongan pola cocog (Pola cocog), nu ngidinan Anjeun pikeun iterate leuwih hiji obyék dibikeun tur napelkeun nilai a lamun aya cocok jeung pola.

    bisi [0, [1, 2, 3]] dina [a, [b, *c]] pa # => 0
    pb # => 1
    pc # => [2, 3] tungtung

    kasus {a: 0, b: 1}
    dina {a: 0, x: 1}
    : teu bisa dihontal
    dina {a: 0, b: var}
    p var # => 1
    tungtung

  • Cangkang itungan interaktif irb (REPL, Read-Eval-Print-Loop) ayeuna gaduh kamungkinan ngedit multi-garis, dilaksanakeun nganggo perpustakaan anu cocog sareng readline. garis, ditulis dina Ruby. rojongan rdoc geus terpadu, ngamungkinkeun Anjeun pikeun nempo informasi rujukan dina kelas husus, modul jeung métode di irb. Disadiakeun warna panyorot garis kode ditémbongkeun ngaliwatan Binding#irb jeung hasil inspeksi objék kelas dasar.

    Ngaleupaskeun basa programming Ruby 2.7.0

  • Ditambahkeun collector sampah kompak (Compaction GC) nu bisa defragment wewengkon memori, ngarengsekeun kinerja sarta konsumsi memori masalah disababkeun ku fragméntasi memori anu lumangsung dina sababaraha aplikasi Ruby multi-threaded. Pikeun pak objék dina numpuk diajukeun Métode GC.compact, anu ngamungkinkeun anjeun ngirangan jumlah halaman mémori anu dianggo sareng ngaoptimalkeun tumpukan pikeun operasi
    CoW (copy-on-write).

  • Dilaksanakan Nyiapkeun pikeun misahkeun argumen dumasar kana posisi dina daptar ("def foo (a, b, c)") jeung kecap konci ("def foo (konci: val)"). Konversi argumen otomatis dumasar kana kecap konci sareng posisi parantos dicabut sareng moal didukung dina cabang Ruby 3.0. Khususna, tos dicabut ngagunakeun argumen anu terakhir salaku parameter kecap konci, ngalangkungan argumen dumasar kana kecap konci salaku parameter Hash anu terakhir, sareng ngabagi argumen terakhir kana parameter posisional sareng kecap konci.

    def foo (konci: 42); tungtung; foo ({konci: 42}) #warned
    def foo(**kw); tungtung; foo ({konci: 42}) #warned
    def foo (konci: 42); tungtung; foo(**{konci: 42}) # OKÉ
    def foo(**kw); tungtung; foo(**{konci: 42}) # OKÉ

    def foo(h, **kw); tungtung; foo (konci: 42) # warned
    def foo(h, konci: 42); tungtung; foo (konci: 42) # warned
    def foo(h, **kw); tungtung; foo({konci: 42}) # OKÉ
    def foo(h, konci: 42); tungtung; foo({konci: 42}) # OKÉ

    def foo(h={}, konci: 42); tungtung; foo ("konci" => 43, konci: 42) # warned
    def foo(h={}, konci: 42); tungtung; foo({"konci" => 43, konci: 42}) # warned
    def foo(h={}, konci: 42); tungtung; foo({"konci" => 43}, konci: 42) # OKÉ

    def foo(opt={}); tungtung; foo (konci: 42) # OKÉ

    def foo(h, **nil); tungtung; foo (konci: 1) #ArgumentError
    def foo(h, **nil); tungtung; foo (**{konci: 1}) # ArgumentError
    def foo(h, **nil); tungtung; foo("str" ​​=> 1) # ArgumentError
    def foo(h, **nil); tungtung; foo ({konci: 1}) # OKÉ
    def foo(h, **nil); tungtung; foo({"str" ​​=> 1}) # OKÉ

    h = {}; def foo(*a) tungtung; foo(**h) # [] h = {}; def foo (a) tungtung; foo(**h) # {} jeung peringatan
    h = {}; def foo(*a) tungtung; foo(h) # [{}] h = {}; def foo (a) tungtung; foo(h) # {}

  • kasempetan ngagunakeun ngaran variabel wilanganana sacara standar pikeun parameter blok.

    [1, 2, 3].masing-masing { nempatkeun @1 } # kawas [1, 2, 3]. unggal { |i| nempatkeun kuring}

  • Pangrojong ékspérimén pikeun rentang anu henteu aya nilai awal.

    ary[..3] # sarua jeung ary[0..3] rel.where(sales: ..100)

  • Ditambahkeun metode Enumerable#tally, anu ngitung sabaraha kali unggal unsur lumangsung.

    ["a", "b", "c", "b"].tally
    # => {"a" => 1, "b" => 2, "c" => 1}

  • Métode swasta panggero diwenangkeun kalawan "diri" literal

    deffoo
    tungtung
    swasta: foo
    sorangan.foo

  • Ditambahkeun Enumerator :: Lazy#eager method to generate regular enumeration from puguh (Enumerator :: Lazy) enumeration.

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.upcase }.peta {|x| x + "!" }. hayang pisan
    p e.class # => Enumerator
    e.peta {|x| x + "?" } # => ["FOO!?", "BAR!?", "BAZ!?"]

  • Ngembangkeun kompiler JIT ékspérimén terus, anu sacara signifikan tiasa ningkatkeun kinerja aplikasi dina basa Ruby. Kompiler JIT Ruby mimiti nyerat kode C kana disk, teras nyauran kompiler C éksternal pikeun ngahasilkeun paréntah mesin (ngadukung nelepon GCC, Clang, sareng Microsoft VC ++). Versi anyar nerapkeun metodeu pikeun panyebaran inline upami diperyogikeun, aplikasi selektif modeu optimasi salami kompilasi dipastikeun, nilai standar "--jit-min-calls" ningkat tina 5 ka 10000, sareng "--jit-max- cache" ti 1000 nepi ka 100 .
  • Ningkatkeun kinerja CGI.escapeHTML, Monitor sareng MonitorMixin.
  • Module#name, true.to_s, false.to_s, sarta nil.to_s mastikeun yén string anu balik nu unchanged pikeun objék dieusian.
  • Ukuran file binér dihasilkeun ku RubyVM:: InstructionSequence#to_binér métode geus ngurangan;
  • Vérsi diropéa komponén diwangun-di, kaasup
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    String Scanner 1.0.3;

  • Perpustakaan dipindahkeun tina distribusi dasar ka bungkusan gem éksternal
    CMath (permata cmath),
    Scanf (permata scanf),
    Cangkang (permata cangkang)
    Sinkronisasi (singkronisasi permata),
    ThreadsWait (permata thwait),
    E2MM (permata e2mmap).

  • Modul stdlib standar diterbitkeun dina rubygems.org:
    patokan,
    cgi,
    utusan,
    getoptlong,
    pop net,
    net smtp,
    buka 3,
    toko,
    tunggal. Monitor modul teu dipindahkeun ka rubygems.org
    panitén,
    séép waktos,
    palacak
    uri,
    yaml, nu ngan disadiakeun dina ruby-core.

  • Gedong Ruby ayeuna peryogi kompiler C anu ngadukung standar C99.

sumber: opennet.ru

Tambahkeun komentar