Sakin yaren shirye-shiryen Ruby 2.7.0

Bayan shekara guda na ci gaba buga saki Rubin 2.7.0, Harshen shirye-shirye na abu mai ƙarfi wanda yake da inganci sosai wajen haɓaka shirye-shirye kuma ya haɗa mafi kyawun fasalin Perl, Java, Python, Smalltalk, Eiffel, Ada da Lisp. An rarraba lambar aikin a ƙarƙashin lasisin BSD ("2-clause BSDL") da lasisin "Ruby", wanda ke nufin sabon sigar lasisin GPL kuma ya dace da GPLv3. Ruby 2.7 shine babban saki na bakwai da aka samar a matsayin wani ɓangare na tsarin ci gaba da aka tsara wanda ya haɗa da keɓe shekara guda don haɓaka fasali da sakin facin wata 2-3.

Main ingantawa:

  • Gwaji goyon baya daidaita tsarin (Daidaitaccen tsari) don maimaita akan abin da aka bayar kuma sanya ƙima idan akwai madaidaicin tsari.

    hali [0, [1, 2, 3]] a [a, [b, *c]] pa #=> 0
    pb#=> 1
    pc #=> [2, 3] karshen

    hali {a: 0, b: 1}
    cikin {a:0,x:1}
    : ba za a iya kaiwa ba
    cikin {a: 0, b:var}
    p wata #=> 1
    karshen

  • Harsashi na lissafin ma'amala irb (REPL, Read-Eval-Print-Loop) yanzu yana fasalta gyare-gyaren layuka da yawa, aiwatarwa ta amfani da ɗakin karatu mai dacewa da karantawa. sallamarubuta a Ruby. An haɗa goyan bayan rdoc, wanda ke ba da damar duba bayanan tunani akan takamaiman azuzuwan, samfura da hanyoyin a cikin irb. Launuka masu launi tare da lambar da aka nuna ta hanyar Binding#irb kuma an samar da sakamakon duba abubuwan aji.

    Sakin yaren shirye-shiryen Ruby 2.7.0

  • Ƙara ƙaramin mai tara shara (Compaction GC) wanda zai iya ɓata yanki na ƙwaƙwalwar ajiya, magance matsalolin jinkirin aiki da ƙara yawan ƙwaƙwalwar ajiya saboda rarrabuwar ƙwaƙwalwar ajiya da ke faruwa yayin aikin wasu aikace-aikacen Ruby masu zaren da yawa. Don shirya abubuwa akan tudu shawara Hanyar GC.compact, wanda ke ba ka damar rage adadin shafukan ƙwaƙwalwar ajiya da aka yi amfani da su da haɓaka tudun ayyuka
    CoW (kwafi-kan-rubuta).

  • An aiwatar shirya don raba gardama dangane da matsayi a cikin jerin ("def foo(a,b,c)") da keywords ("def foo (key: val)"). Juya gardama ta atomatik dangane da kalmomi da matsayi an soke su kuma ba za a goyi bayan reshen Ruby 3.0 ba. Musamman ma, an soke shi don amfani da hujja ta ƙarshe azaman sigogi na maɓalli, don ƙaddamar da mahallin tushen mahimmin kalmomi a matsayin madaidaicin zanta na ƙarshe, da raba hujja ta ƙarshe zuwa sigogin matsayi da maɓalli.

    def foo (maɓalli: 42); karshen; foo({key: 42}) #gargadi
    def foo(**kw); karshen; foo({key: 42}) # gargadi
    def foo (maɓalli: 42); karshen; foo(**{key: 42}) # Ok
    def foo(**kw); karshen; foo(**{key: 42}) # Ok

    def foo(h, **kw); karshen; foo (maɓalli: 42) #gargadi
    def foo (h, maɓalli: 42); karshen; foo (maɓalli: 42) #gargadi
    def foo(h, **kw); karshen; foo({key: 42}) # Ok
    def foo (h, maɓalli: 42); karshen; foo({key: 42}) # Ok

    def foo(h={}, maɓalli: 42); karshen; foo("key" => 43, maɓalli: 42) # gargadi
    def foo(h={}, maɓalli: 42); karshen; foo({"key" => 43, maɓalli: 42}) # gargadi
    def foo(h={}, maɓalli: 42); karshen; foo ({"key" => 43}, maɓalli: 42) # Ok

    def foo(opt={}); karshen; foo( key: 42 ) # Ok

    def foo (h, ** nil); karshen; foo (maɓalli: 1) #Kuskuren Hujja
    def foo (h, ** nil); karshen; foo(**{maɓalli: 1}) # Kuskuren Hujja
    def foo (h, ** nil); karshen; foo("str" ​​==> 1) # Kuskuren Hujja
    def foo (h, ** nil); karshen; foo({key: 1}) # Ok
    def foo (h, ** nil); karshen; foo({"str"=> 1}) # Ok

    h = {}; kare foo(*a) karshen; foo(**h) # [] h = {}; kare foo(a) karshen; foo(**h) # {} da gargadi
    h = {}; kare foo(*a) karshen; foo(h) # [{}] h = {}; kare foo(a) karshen; fo(h) # {}

  • Dama ta amfani da sunaye masu ƙididdigewa ta tsohuwa don toshe sigogi.

    [1, 2, 3].kowane {yana sanya @1 } # daidai da [1, 2, 3].kowane { |i| sa i}

  • Goyan bayan gwaji don jeri ba tare da ƙimar farko ba.

    ary[..3] # kama da ary[0..3] rel.inda (tallace-tallace: ..100)

  • Haɓaka Enumerable#Tally, wanda ke ƙidaya adadin lokutan kowane kashi ya bayyana.

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

  • An yarda da kiran hanyar sirri tare da "kai" na zahiri

    deffoo
    karshen
    sirri :foo
    kai.foo

  • Ƙirar ƙididdiga :: Hanyar Lazy# don samar da ƙididdigewa na yau da kullum daga ƙididdige ƙididdiga (Enumerator :: Lazy).

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

  • An ci gaba da haɓaka haɓakar mai tarawa na gwaji na JIT, wanda zai iya haɓaka aikin aikace-aikace a cikin yaren Ruby sosai. Ruby's JIT compiler ya fara rubuta lambar C zuwa faifai, sannan ya kira mai tarawa C na waje don samar da umarnin injin (yana goyan bayan kiran GCC, Clang, da Microsoft VC++). Sabuwar sigar tana aiwatar da hanyar ƙaddamar da layin layi idan ya cancanta, zaɓin aikace-aikacen ingantawa yayin haɗawa an tabbatar da shi, ƙimar tsoho na "-jit-min-kira" yana ƙaruwa daga 5 zuwa 10000, da "-jit-max- cache" daga 1000 zuwa 100 .
  • Inganta aikin CGI.escapeHTML, Monitor da MonitorMixin.
  • Module#name, true.to_s, false.to_s, da nil.to_s suna tabbatar da cewa an dawo da igiyar da ba ta canzawa don ƙayyadadden abu.
  • Girman fayilolin binary ɗin da RubyVM :: UmarniSequence#zuwa_binary; an rage hanyar.
  • Abubuwan da aka sabunta na abubuwan da aka gina a ciki, gami da
    Bundler 2.1.2, RubyGems 3.1.2,
    1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    Scanner na igiya 1.0.3;

  • An matsar da ɗakunan karatu daga fakitin tushe zuwa fakitin gem na waje
    CMath (gem gem),
    Scanf (scanf gem),
    Shell (gem)
    Synchronizer (sync gem),
    ThreadsWait (gem gem),
    E2MM (e2map gem).

  • Ana buga tsoffin samfuran stdlib akan rubygems.org:
    benchmark,
    cgi,
    wakilai,
    tashi tsaye,
    net-pop,
    smtp net,
    bude 3,
    kantin sayar da kayayyaki,
    singleton. Ba a matsar da kayayyaki zuwa rubygems.org ba
    mai kallo,
    lokacin hutu,
    gano
    uri,
    yaml, wanda kawai ake jigilar su da ruby-core.

  • Ginin Ruby yanzu yana buƙatar mai tarawa C wanda ke goyan bayan ma'aunin C99.

source: budenet.ru

Add a comment