Pagpagawas sa Ruby programming language 2.7.0

Human sa usa ka tuig nga kalamboan gipatik buhian Ruby 2.7.0, usa ka dinamiko, object-oriented programming language nga adunay taas nga episyente nga pagpalambo sa programa ug naglakip sa labing maayo nga mga bahin sa Perl, Java, Python, Smalltalk, Eiffel, Ada, ug Lisp. Ang code sa proyekto giapod-apod ubos sa mga lisensya sa BSD (2-clause BSDL) ug Ruby, nga nagtumong sa pinakabag-o nga bersyon sa GPL ug hingpit nga nahiuyon sa GPLv3. Ang Ruby 2.7 mao ang ikapitong mayor nga pagpagawas nga giandam ubos sa usa ka giplano nga proseso sa pagpalambo nga naglambigit sa paggahin og usa ka tuig aron mapalambo ang mga pagpaayo sa function ug pagpagawas sa mga pagpagawas sa maintenance matag duha hangtod tulo ka bulan.

nag-unang mga kalamboan:

  • Eksperimental pagsuporta pagpares sa sumbanan (Pagpares sa sumbanan), nga nagtugot kanimo sa pag-iterate sa usa ka gihatag nga butang ug pag-assign og value kon adunay match sa pattern.

    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 interactive computing shell irb (REPL, Read-Eval-Print-Loop) karon nagsuporta na sa multi-line editing gamit ang readline-compatible library. linya, nga gisulat sa Ruby. Ang integrated rdoc support nagtugot sa pagtan-aw sa reference information para sa espesipikong mga klase, modules, ug methods sa irb. Ang colored highlighting gihatag para sa mga code lines nga gipakita pinaagi sa Binding#irb ug para sa pag-inspeksyon sa mga base class objects.

     Pagpagawas sa Ruby programming language 2.7.0
  • Gidugang ang usa ka compaction garbage collector (Compaction GC), nga maka-defragment sa memorya, nga makasulbad sa pagkadaot sa performance ug pagtaas sa konsumo sa memorya tungod sa memory fragmentation nga mahitabo atol sa pagpatuman sa pipila ka multithreaded Ruby applications. Para sa pag-empake sa mga butang sa heap. gisugyot Ang pamaagi sa GC.compact, nga nagtugot sa pagpakunhod sa gidaghanon sa mga panid sa memorya nga gigamit ug pag-optimize sa heap alang sa mga operasyon
    CoW (kopya-sa-pagsulat).
  • Gibuhat Pag-andam sa pagbulag sa mga argumento nga gibase sa posisyon ug gibase sa keyword ("def foo(a,b,c)") gikan sa mga argumento nga gibase sa keyword ("def foo(key: val)"). Ang awtomatikong pagkakabig sa argumento nga gibase sa keyword ug posisyon wala na gigamit ug dili na suportahan sa Ruby 3.0. Sa piho, ang paggamit sa katapusang argumento isip usa ka parameter sa keyword, ang pagpasa sa mga argumento nga gibase sa keyword isip katapusang hash parameter, ug ang pagbahin sa katapusang argumento ngadto sa mga parameter sa posisyon ug keyword wala na gigamit.

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

    def foo(h, **kw); katapusan; foo(key: 42) # gipasidan-an
    def foo(h, yawe: 42); katapusan; foo(yawe: 42) # gipasidan-an
    def foo(h, **kw); katapusan; foo({key: 42}) # OK
    def foo(h, yawe: 42); katapusan; foo({yukbo: 42}) # OK

    def foo(h={}, yawe: 42); katapusan; foo("yawe" => 43, yawe: 42) # gipasidaan
    def foo(h={}, yawe: 42); katapusan; foo({"key" => 43, yawe: 42}) # gipasidaan
    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(yawi: 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) usa ka katapusan; foo(**h) # [] h = {}; def foo(a) usa ka katapusan; foo(**h) # {} ug pasidaan
    h = {}; def foo(*a) usa ka katapusan; foo(h) # [{}] h = {}; def foo(a) usa ka katapusan; foo(h) # {}

  • Abilidad paggamit sa mga numero sa variable isip default para sa mga block parameter.

    [1, 2, 3].matag usa { nagbutang og @1} # parehas sa [1, 2, 3].matag usa { |i| nagbutang og i}

  • Eksperimental nga suporta para sa mga sakup nga walay inisyal nga bili.

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

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

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

  • Gitugotan ang pagtawag sa usa ka pribadong pamaagi gamit ang literal nga "kaugalingon".

    siguradong lami
    katapusan
    pribado :foo
    kaugalingon.foo

  • Gidugang ang Enumerator::Lazy#eager nga pamaagi aron makamugna og regular nga enumerasyon gikan sa usa ka lazy (Enumerator::Lazy) nga enumerasyon.

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

  • Nagpadayon ang pag-uswag sa eksperimental nga JIT compiler, nga nakapauswag pag-ayo sa performance sa mga aplikasyon sa Ruby. Ang JIT compiler nga gi-implementar sa Ruby unang nagsulat sa C code ngadto sa disk ug dayon nagtawag sa external C compiler aron makamugna og mga instruksyon sa makina (gisuportahan ang GCC, Clang, ug Microsoft VC++). Ang bag-ong bersyon nagpatuman og pamaagi para sa inline unwrapping kung gikinahanglan, gihatag ang pinili nga aplikasyon sa mga optimization mode atol sa compilation, ug ang default nga bili sa "--jit-min-calls" gipataas gikan sa 5 ngadto sa 10000, ug ang "--jit-max-cache" gikan sa 1000 ngadto sa 100.
  • Gipauswag nga performance sa CGI.escapeHTML, Monitor, ug MonitorMixin.
  • Sa Module#name, true.to_s, false.to_s, ug nil.to_s, siguroha nga ang usa ka string nga gibalik wala mausab para sa gitakdang butang.
  • Ang gidak-on sa mga binary file nga gihimo sa RubyVM::InstructionSequence#to_binary nga pamaagi gipakunhod;
  • Gi-update nga mga bersyon sa built-in nga mga 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,
    StringScanner 1.0.3;
  • Ang mga librarya gibalhin gikan sa base package ngadto sa external gem packages.
    CMath (cmath nga mutya),
    Scanf (scanf gem),
    Kabhang (mutya sa kabhang),
    Sinkronisador (sync gem),
    ThreadsWait (thwait gem),
    E2MM (e2mmap gem).
  • Ang default nga stdlib modules gipatik sa rubygems.org:
    benchmark,
    cgi,
    delegado,
    getoptlong,
    net-pop,
    net-smtp,
    abli3,
    pstore,
    Singleton. Ang mga monitor module wala pa mabalhin ngadto sa rubygems.org.
    tigpaniid,
    paghunong sa oras,
    tigsubay,
    uri,
    yaml, nga gihatag lamang sa ruby-core.
  • Ang pagtukod og Ruby nagkinahanglan na karon og C compiler nga mosuporta sa C99 standard.

Source: opennet.ru