Pagpagawas sa Ruby programming language 2.7.0

Human sa usa ka tuig nga kalamboan gipatik buhian Ruby 2.7.0, usa ka dinamikong object-oriented nga programming language nga episyente kaayo sa pag-develop sa programa ug gilakip ang labing maayo nga mga bahin sa Perl, Java, Python, Smalltalk, Eiffel, Ada ug Lisp. Ang code sa proyekto giapod-apod ubos sa BSD ("2-clause BSDL") ug "Ruby" nga mga lisensya, nga nagtumong sa pinakabag-o nga bersyon sa lisensya sa GPL ug hingpit nga nahiuyon sa GPLv3. Ang Ruby 2.7 mao ang ikapito nga mayor nga pagpagawas nga gihimo isip bahin sa usa ka giplano nga proseso sa pag-uswag nga naglakip sa paggahin og usa ka tuig alang sa mga pagpalambo sa feature ug usa ka 2-3 ka bulan nga pagpagawas sa patch.

nag-unang mga kalamboan:

  • Eksperimento pagsuporta pagkaparehas sa pattern (Pagpares sa sumbanan) sa pag-uli sa gihatag nga butang ug paghatag og usa ka bili kung adunay usa ka pattern nga tugma.

    kaso [0, [1, 2, 3]] sa [a, [b, *c]] pa # => 0
    pb # => 1
    pc # => [2, 3] katapusan

    kaso {a: 0, b: 1}
    sa{a:0,x:1}
    : dili maabot
    sa {a: 0, b: var}
    p var # => 1
    katapusan

  • Ang kabhang sa interactive nga mga kalkulasyon irb (REPL, Read-Eval-Print-Loop) karon adunay posibilidad sa multi-line nga pag-edit, gipatuman gamit ang readline-compatible library linyagisulat sa Ruby. Ang suporta alang sa rdoc gihiusa, nga nagtugot sa pagtan-aw sa impormasyon sa pakisayran sa piho nga mga klase, modules ug mga pamaagi sa irb. Gihatag ang kolor nga pag-highlight sa mga linya nga adunay code nga gipakita pinaagi sa Binding#irb ug mga resulta sa pag-inspeksyon sa mga butang nga base sa klase.

    Pagpagawas sa Ruby programming language 2.7.0

  • Gidugang ang usa ka compact garbage collector (Compaction GC) nga maka-defragment sa usa ka rehiyon sa memorya, pagsulbad sa mga problema sa hinay nga performance ug dugang nga konsumo sa memorya tungod sa memory fragmentation nga mahitabo sa panahon sa operasyon sa pipila ka multi-threaded Ruby applications. Sa pagputos sa mga butang sa tapok gisugyot GC.compact nga pamaagi aron makunhuran ang gidaghanon sa mga panid sa memorya nga gigamit ug ma-optimize ang heap para sa mga operasyon
    CoW (copy-on-write).

  • Gibuhat nangandam sa pagbulag sa mga argumento base sa posisyon sa listahan ("def foo(a,b,c)") ug mga keyword ("def foo(key: val)"). Ang awtomatikong pagkakabig sa argumento nga gibase sa mga keyword ug posisyon wala na gigamit ug dili suportahan sa sanga sa Ruby 3.0. Sa partikular, wala na gigamit ang paggamit sa kataposang argumento isip mga parameter sa keyword, sa pagpasa sa mga argumento nga gibase sa keyword isip kataposang hash parameter, ug pagbahin sa kataposang argumento ngadto sa positional ug keyword parameters.

    def foo(key: 42); katapusan; foo({key: 42}) #gipasidaan
    def foo(**kw); katapusan; foo({key: 42}) #gipasidaan
    def foo(key: 42); katapusan; foo(**{key: 42}) # OK
    def foo(**kw); katapusan; foo(**{key: 42}) # OK

    def foo(h, **kw); katapusan; foo(key: 42) #gipasidaan
    def foo(h, yawe: 42); katapusan; foo(key: 42) #gipasidaan
    def foo(h, **kw); katapusan; foo({key: 42}) # OK
    def foo(h, yawe: 42); katapusan; foo({key: 42}) # OK

    def foo(h={}, yawe: 42); katapusan; foo("key" => 43, yawe: 42) #gipasidaan
    def foo(h={}, yawe: 42); katapusan; foo({"key" => 43, yawe: 42}) # gipasidan-an
    def foo(h={}, yawe: 42); katapusan; foo({"key" => 43}, yawe: 42) # OK

    def foo(opt={}); katapusan; foo( yawe: 42 ) # OK

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

    h = {}; def foo(*a) katapusan; foo(**h) # [] h = {}; def foo(a) katapusan; foo(**h) # {} ug pasidaan
    h = {}; def foo(*a) katapusan; foo(h) # [{}] h = {}; def foo(a) katapusan; foo(h) # {}

  • Abilidad gamit ang ginumero nga default variable nga mga ngalan alang sa mga parameter sa block.

    [1, 2, 3].matag { nagbutang @1 } # sama sa [1, 2, 3].matag { |i| gibutang ko}

  • Eksperimento nga suporta para sa mga han-ay nga walay inisyal nga bili.

    ary[..3] # parehas sa ary[0..3] rel.where(sales: ..100)

  • Gidugang ang Enumerable#tally nga pamaagi, nga nag-ihap kung pila ka beses mahitabo ang matag elemento.

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

  • Gitugotan ang pribadong paagi sa pagtawag sa literal nga "kaugalingon".

    deffoo
    katapusan
    pribado :foo
    kaugalingon.foo

  • Gidugang nga Enumerator:: Lazy#eger nga pamaagi para makamugna ug regular nga enumeration gikan sa lazy (Enumerator::Lazy) enumeration.

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

  • Ang pag-uswag sa usa ka eksperimento nga JIT compiler nagpadayon, nga mahimo’g makapauswag sa paghimo sa mga aplikasyon sa pinulongang Ruby. Ang JIT compiler nga gisugyot sa Ruby una nga nagsulat sa C code sa disk, pagkahuman nagtawag kini usa ka eksternal nga C compiler aron makamugna mga panudlo sa makina (GCC, Clang ug Microsoft VC ++ gisuportahan). Ang bag-ong bersyon nagpatuman sa usa ka pamaagi alang sa inline nga pag-deploy kung gikinahanglan, pinili nga aplikasyon sa optimization modes sa panahon sa compilation, ang default value sa "--jit-min-calls" gipataas gikan sa 5 ngadto sa 10000, ug "--jit-max-cache" gikan sa 1000 ngadto sa 100.
  • Gipauswag nga pasundayag sa CGI.escapeHTML, Monitor ug MonitorMixin.
  • Ang module#name, true.to_s, false.to_s, ug nil.to_s nagsiguro nga ang usa ka string gibalik nga wala mausab alang sa piho nga butang.
  • Ang gidak-on sa binary files nga namugna sa RubyVM::InstructionSequence#to_binary nga paagi gipakunhod;
  • Gi-update nga mga bersyon sa mga built-in nga sangkap, lakip ang
    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;

  • Ang mga librarya mibalhin gikan sa base distribution ngadto sa external gem packages
    CMath (cmath gem),
    Scanf (scanf gem),
    Shell (kabhang nga mutya),
    Synchronizer (pag-sync nga mutya),
    ThreadsWait (thwait gem),
    E2MM (e2mmap nga mutya).

  • Ang default nga stdlib modules gipatik sa rubygems.org:
    benchmark,
    cgi,
    delegado,
    getoptlong,
    net pop,
    net smtp,
    bukas 3,
    pstore,
    singleton. Monitor modules wala gibalhin sa rubygems.org
    tigpaniid,
    timeout
    tigsubay
    uri,
    yaml, nga gipadala lamang nga adunay ruby-core.

  • Ang pagtukod sa Ruby karon nanginahanglan usa ka C compiler nga nagsuporta sa sumbanan sa C99.

Source: opennet.ru

Idugang sa usa ka comment