Rilis basa pamrograman Ruby 2.7.0

Sawise setahun pembangunan diterbitake ngeculake Ruby 2.7.0, basa pemrograman dinamis lan berorientasi obyek sing efisien banget ing pangembangan program lan nggabungake fitur paling apik saka Perl, Java, Python, Smalltalk, Eiffel, Ada, lan Lisp. Kode proyek disebarake miturut lisensi BSD ("2 klausa BSDL") lan "Ruby", sing nuduhake versi paling anyar saka lisensi GPL lan kompatibel karo GPLv3. Ruby 2.7 minangka rilis utama kapitu sawise proses pangembangan sing direncanakake sing butuh setaun kanggo nyiapake perbaikan fungsional lan ngasilake rilis pangopènan saben 2-3 wulan.

Utama dandan:

  • eksperimen dhukungan pencocokan pola (Pola sing cocog) kanggo ngulang obyek sing diwenehake lan menehi nilai yen ana pola sing cocog.

    kasus [0, [1, 2, 3]] ing [a, [b, *c]] pa # => 0
    pb # => 1
    pc # => [2, 3] pungkasan

    kasus {a: 0, b: 1}
    ing {a: 0, x: 1}
    : ora kasedhiya
    ing {a: 0, b: var}
    p var # => 1
    ends

  • Cangkang petungan interaktif irb (REPL, Read-Eval-Print-Loop) saiki nduweni fitur editing multi-line, diimplementasikake nggunakake perpustakaan sing kompatibel karo readline remine, ditulis ing Ruby. Dhukungan kanggo rdoc wis terintegrasi, sing ngidini ndeleng informasi referensi babagan kelas, modul lan cara sing ditemtokake ing irb. Panyorot warna garis kanthi kode sing ditampilake liwat Binding#irb lan asil mriksa obyek kelas dhasar diwenehake.

    Rilis basa pamrograman Ruby 2.7.0

  • Nambahake kolektor uwuh kompak (Compaction GC) sing bisa defragment wilayah memori, mecahaken masalah kinerja alon lan tambah konsumsi memori amarga fragmentasi memori sing dumadi sak operasi sawetara aplikasi Ruby multi-Utas. Kanggo ngemas obyek ing tumpukan ngajokaken Cara GC.compact, sing ngidini sampeyan nyuda jumlah kaca memori sing digunakake lan ngoptimalake tumpukan kanggo operasi
    CoW (copy-on-write).

  • Dilaksanakake nyiapake kanggo misahake argumen adhedhasar posisi dhaptar ("def foo(a,b,c)") lan tembung kunci ("def foo(key: val)"). Konversi argumen otomatis adhedhasar tembung kunci lan posisi wis ora digunakake lan ora bakal didhukung ing cabang Ruby 3.0. Secara khusus, wis ora digunakake nggunakake argumen pungkasan minangka parameter tembung kunci, ngliwati argumen adhedhasar tembung kunci minangka parameter hash pungkasan, lan pamisah argumen pungkasan dadi parameter posisi lan tembung kunci.

    def foo (kunci: 42); pungkasan; foo({key: 42}) #warned
    def foo(**kw); pungkasan; foo({key: 42}) # dielingake
    def foo (kunci: 42); pungkasan; foo(**{key: 42}) # OK
    def foo(**kw); pungkasan; foo(**{key: 42}) # OK

    def foo(h, **kw); pungkasan; foo(key: 42) # dielingake
    def foo(h, kunci: 42); pungkasan; foo (kunci: 42) #dielingake
    def foo(h, **kw); pungkasan; foo({key: 42}) # OK
    def foo(h, kunci: 42); pungkasan; foo({key: 42}) # OK

    def foo(h={}, kunci: 42); pungkasan; foo("key" => 43, key: 42) # warned
    def foo(h={}, kunci: 42); pungkasan; foo({"key" => 43, key: 42}) # warned
    def foo(h={}, kunci: 42); pungkasan; foo({"key" => 43}, key: 42) # OK

    def foo(opt={}); pungkasan; foo (kunci: 42) # OK

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

    h = {}; def foo(*a) pungkasan; foo(**h) # [] h = {}; def foo(a) pungkasan; foo(**h) # {} lan bebaya
    h = {}; def foo(*a) end; foo(h) # [{}] h = {}; def foo(a) pungkasan; fo (h) # {}

  • Opportunity nggunakake nomer jeneng variabel standar kanggo paramΓ¨ter pemblokiran.

    [1, 2, 3].saben { nempatno @1 } # padha karo [1, 2, 3].saben { |i| sijine i}

  • Dhukungan eksperimen kanggo kisaran tanpa nilai awal.

    ary[..3] # padha karo ary[0..3] rel.where(sales: ..100)

  • Ditambahake metode Enumerable#tally, sing ngitung kaping pirang-pirang unsur katon.

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

  • Diijini nelpon cara pribadi kanthi harfiah "dhiri"

    def wae
    ends
    pribadhi: foo
    dhewe.foo

  • Added Enumerator :: Lazy#eager method to generate a regular enumeration from a lazy enumerator (Enumerator :: Lazy).

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

  • Pangembangan kompiler JIT eksperimen terus, sing bisa ningkatake kinerja aplikasi ing basa Ruby kanthi signifikan. Compiler JIT Ruby pisanan nulis kode C menyang disk, lan banjur nelpon kompiler C external kanggo generate instruksi mesin (ndhukung nelpon GCC, Clang, lan Microsoft VC ++). Versi anyar ngleksanakake cara kanggo panyebaran inline yen perlu, aplikasi selektif mode optimasi sajrone kompilasi dipastikan, nilai standar "--jit-min-calls" tambah saka 5 dadi 10000, lan "--jit-max- cache" saka 1000 nganti 100 .
  • Peningkatan kinerja CGI.escapeHTML, Monitor lan MonitorMixin.
  • Modul#name, true.to_s, false.to_s, lan nil.to_s mesthekake yen string bali sing ora diganti kanggo obyek kasebut.
  • Ukuran file binar sing digawe dening metode RubyVM::InstructionSequence#to_binary; wis dikurangi.
  • Dianyari versi komponen dibangun ing, kalebu
    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;

  • Pustaka wis dipindhah saka paket dhasar menyang paket permata eksternal
    CMath (permata cmath),
    Scanf (permata scanf),
    Shell (permata cangkang)
    Sinkronisasi (permata sinkronisasi),
    ThreadsWait (permata thwait),
    E2MM (permata e2mmap).

  • Modul stdlib standar diterbitake ing rubygems.org:
    pathokan,
    cgi,
    utusan
    getoptlong,
    net pop,
    net-smtp
    mbukak3,
    pstore,
    tunggal. modul monitor ora dipindhah menyang rubygems.org
    pengamat,
    wektu ne entek
    tracer
    uri,
    yaml, kang mung kasedhiya ing ruby-inti.

  • Bangunan Ruby saiki mbutuhake kompiler C sing ndhukung standar C99.

Source: opennet.ru

Add a comment