Ho lokolloa ha puo ea lenaneo la Ruby 2.7.0

Kamora selemo sa ntshetsopele e phatlalalitsoeng lokolla Mofuta oa Ruby 2.7.0, puo e matla ea lenaneo e shebaneng le ntho e sebetsang hantle haholo ntlafatsong ea lenaneo mme e kenyelletsa likarolo tse ntle ka ho fetisisa tsa Perl, Java, Python, Smalltalk, Eiffel, Ada le Lisp. Khoutu ea morero e ajoa tlas'a BSD ("2-clause BSDL") le laesense ea "Ruby", e bolelang mofuta oa morao-rao oa laesense ea GPL mme e lumellana ka botlalo le GPLv3. Ruby 2.7 ke tokollo e kholo ea bosupa e lokelang ho etsoa e le karolo ea ts'ebetso e reriloeng ea ntlafatso e kenyelletsang ho behella ka thoko selemo bakeng sa ntlafatso ea likarolo le tokollo ea patch ea khoeli ea 2-3.

ka sehloohong ntlafatso:

  • tekolo tšehetso ho tšoana le mohlala (Ho bapisa mohlala), e u lumellang ho pheta-pheta ntho e fanoeng 'me u fane ka boleng haeba ho na le papali ea mohlala.

    case [0, [1, 2, 3]] ho [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] pheletso

    nyeoe {a: 0, b: 1}
    ka{a:0,x:1}
    :ha e fumanehe
    ho {a: 0, b: var}
    p var #=> 1
    QETA

  • Khetla ea lipalo tse sebetsanang le irb (REPL, Read-Eval-Print-Loop) joale e na le ho hlophisoa ha mela e mengata, e kenngoeng tšebetsong ho sebelisoa laebrari e lumellanang le bala. reline, e ngotsoeng ka Ruby. rdoc e kenyelelitsoe, e u lumellang hore u shebe boitsebiso ba litšupiso ho lihlopha tse boletsoeng, li-module le mekhoa ea irb. E fane ka 'mala o totobatsang mela ea khoutu e bonts'itsoeng ka Binding#irb le liphetho tsa tlhahlobo ea lintho tsa maemo a tlase.

    Ho lokolloa ha puo ea lenaneo la Ruby 2.7.0

  • E kentse pokello ea lithōle tse kopanetsoeng (Compaction GC) e ka senyang sebaka sa mohopolo, ho rarolla mathata a ts'ebetso le ts'ebeliso ea mohopolo e bakoang ke ho arohana ha mohopolo ho hlahang lits'ebetsong tse ling tsa Ruby tse nang le mefuta e mengata. Ho paka dintho qubung sisintsweng Mokhoa oa GC.compact ho fokotsa palo ea maqephe a memori a sebelisitsoeng le ho ntlafatsa qubu bakeng sa ts'ebetso
    CoW (kopi-on-write).

  • E entsoe ho itokisetsa ho arola likhang ho latela maemo a lenane (“def foo(a,b,c)”) le mantsoe a sehlooho (“def foo(key: val)”). Phetoho ea likhang e ipapisitseng le mantsoe a bohlokoa le boemo e tlositsoe 'me e ke ke ea tšehetsoa lekaleng la Ruby 3.0. Ka ho khetheha, e theohile ho sebelisa khang ea ho qetela e le li-parameter tsa mantsoe a sehlooho, e fetisa likhang tse thehiloeng ho mantsoe a sehlooho e le parameter ea ho qetela ea hash, le ho arola khang ea ho qetela ka mekhahlelo ea boemo le mantsoe a sehlooho.

    def foo(senotlolo: 42); QETA; foo({key: 42}) # e lemositswe
    def foo(**kw); QETA; foo({senotlolo: 42}) #lemosoa
    def foo(senotlolo: 42); QETA; foo(**{senotlolo: 42}) # HO lokile
    def foo(**kw); QETA; foo(**{senotlolo: 42}) # HO lokile

    def foo(h, **kw); QETA; foo(senotlolo: 42) #lemosoa
    def foo(h, senotlolo: 42); QETA; foo(senotlolo: 42) #lemosoa
    def foo(h, **kw); QETA; foo({senotlolo: 42}) # HO lokile
    def foo(h, senotlolo: 42); QETA; foo({senotlolo: 42}) # HO lokile

    def foo(h={}, senotlolo: 42); QETA; foo("key" => 43, senotlolo: 42) # hlokomelisitsoe
    def foo(h={}, senotlolo: 42); QETA; foo({"key" => 43, senotlolo: 42}) # hlokomelisitsoe
    def foo(h={}, senotlolo: 42); QETA; foo({"key" => 43}, senotlolo: 42) # OK

    def foo(opt={}); QETA; foo( senotlolo: 42 ) # Ho lokile

    def foo(h, **nil); QETA; foo(senotlolo: 1) #ArgumentError
    def foo(h, **nil); QETA; foo(**{key: 1}) # ArgumentError
    def foo(h, **nil); QETA; foo("str" ​​=> 1) # Phoso ea Khang
    def foo(h, **nil); QETA; foo({senotlolo: 1}) # HO lokile
    def foo(h, **nil); QETA; foo({"str" ​​=> 1}) # HO lokile

    h = {}; def foo(*a) pheletso; foo(**h) # [] h = {}; def foo(a) pheletso; foo(**h) # {} le temoso
    h = {}; def foo(*a) pheletso; foo(h) # [{}] h = {}; def foo(a) pheletso; foo(h) # {}

  • Monyetla ho sebelisa mabitso a feto-fetohang a nang le linomoro ka mokhoa oa kamehla bakeng sa li-block parameters.

    [1, 2, 3].e mong le e mong { o beha @1 } # joalo ka [1, 2, 3].e mong le e mong { |i| e beha ke}

  • Tšehetso ea liteko bakeng sa mekhahlelo e se nang boleng ba pele.

    ary[..3] # e tšoana le ary[0..3] rel.where(thekiso: ..100)

  • E kenyellelitsoe mokhoa o ke keng oa lekanngoa #tally o balang hore na element ka 'ngoe e etsahala makhetlo a makae.

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

  • E lumelletsoe ho letsetsa mokhoa oa lekunutu ka "self"

    deffoo
    QETA
    private :foo
    boithati.foo

  • E kentse Mokalli::Mokhoa oa botsoa#o chesehang oa ho hlahisa palo e tloaelehileng ho tsoa ho palo e botsoa (Mopalohi::E botsoa).

    a = %w(foo bar baz)
    e = a.lazy.mapa {|x| x.upcase }.mapa {|x| x +"! }.ka tjantjello
    p e.sehlopha #=> Mohlophisi
    p e.mapa {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • Tsoelo-pele ea moqapi oa JIT oa liteko o tsoetse pele, o ka ntlafatsang haholo ts'ebetso ea likopo ka puo ea Ruby. Ruby's JIT compiler o qala ka ho ngola khoutu ea C ho disk, ebe o bitsa moqapi oa C oa kantle ho hlahisa litaelo tsa mochine (e tšehetsa ho letsetsa GCC, Clang, le Microsoft VC ++). Phetolelo e ncha e sebelisa mokhoa oa ho tsamaisoa ha inline ha ho hlokahala, ho netefatsoa ts'ebeliso e ikhethileng ea mekhoa ea ntlafatso nakong ea ho bokelloa, boleng ba kamehla ba "-jit-min-calls" bo eketseha ho tloha ho 5 ho isa ho 10000, le "-jit-max- cache" ho tloha ho 1000 ho isa ho 100.
  • Ts'ebetso e ntlafetseng ea CGI.escapeHTML, Monitor le MonitorMixin.
  • Mojule#name, true.to_s, false.to_s, le nil.to_s li netefatsa hore khoele e khutlisoa e sa fetoheng bakeng sa ntho e boletsoeng.
  • Boholo ba lifaele tsa binary tse hlahisoang ke RubyVM::Taelo ea Taelo#to_binary; mokhoa o fokotsehile.
  • Liphetolelo tse ntlafalitsoeng tsa likarolo tse hahiloeng, ho kenyelletsa
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    StringSkena 1.0.3;

  • Lilaebrari li tlositsoe ho tloha sephutheloana sa motheo ho ea ho liphutheloana tsa majoe a kantle
    CMath (cmth lehakoe),
    Scanf (scanf lehakoe),
    Shell (lehakoe la khetla),
    Synchronizer (makhonthe lehakoe),
    ThreadsWait (letlotlo la thwait),
    E2MM (e2mmap lehakoe).

  • Li-module tsa kamehla tsa stdlib li hatisoa ho rubygems.org:
    benchmark,
    cgi,
    moemeli
    getoptlong,
    net pop,
    net smtp,
    bula3,
    lebenkeleng,
    singleton. hlokomela li-modules ha li fallisetsoe ho rubygems.org
    moshebelli,
    khefutso,
    tracer
    ure,
    yaml, e fanoang feela ka ruby-core.

  • Ho haha ​​Ruby hona joale ho hloka moqapi oa C o tšehetsang maemo a C99.

Source: opennet.ru

Eketsa ka tlhaloso