Útgáfa af Ruby forritunarmálinu 2.7.0

Eftir eins árs þróun birt sleppa Ruby 2.7.0, kraftmikið hlutbundið forritunarmál sem er mjög skilvirkt í þróun forrita og inniheldur bestu eiginleika Perl, Java, Python, Smalltalk, Eiffel, Ada og Lisp. Verkefniskóðanum er dreift undir BSD ("2-lið BSDL") og "Ruby" leyfi, sem vísar til nýjustu útgáfu GPL leyfisins og er fullkomlega samhæft við GPLv3. Ruby 2.7 er sjöunda stóra útgáfan sem er framleidd sem hluti af fyrirhuguðu þróunarferli sem felur í sér að taka eitt ár til hliðar fyrir endurbætur á eiginleikum og 2-3 mánaða plástraútgáfu.

Helstu endurbætur:

  • tilrauna styðja mynstursamsvörun (Samsvörun á mynstri) til að endurtaka yfir tiltekinn hlut og úthluta gildi ef það er mynstursamsvörun.

    fall [0, [1, 2, 3]] í [a, [b, *c]] á #=> 0
    pb #=> 1
    pc #=> [2, 3] enda

    mál {a: 0, b: 1}
    í{a:0,x:1}
    : óaðgengilegt
    í {a: 0, b: var}
    p var #=> 1
    enda

  • Skel gagnvirkra útreikninga irb (REPL, Read-Eval-Print-Loop) hefur nú möguleika á fjöllínu klippingu, útfærð með því að nota leslínusamhæft bókasafn endurlínaskrifað í Ruby. Stuðningur við rdoc hefur verið samþættur, sem gerir kleift að skoða tilvísunarupplýsingar um tilgreinda flokka, einingar og aðferðir í irb. Lituð auðkenning á línum með kóða sem sýndur er með Binding#irb og niðurstöðum skoðunar á grunnflokkshlutum er til staðar.

    Útgáfa af Ruby forritunarmálinu 2.7.0

  • Bætt við fyrirferðarlítilli sorphirðu (Compaction GC) sem getur framkvæmt defragmentation á svæði í minni, leyst vandamál með hægum afköstum og aukinni minnisnotkun vegna minnisbrots sem á sér stað við notkun sumra fjölþráða Ruby forrita. Til að pakka hlutum á hauginn lagt til GC.compact aðferð til að fækka minnissíðum sem eru notaðar og fínstilla hrúguna fyrir aðgerðir
    CoW (copy-on-write).

  • Framkvæmt undirbúa að aðskilja rök sem byggjast á staðsetningu á listanum ("def foo(a,b,c)") og leitarorðum ("def foo(lykill: val)"). Sjálfvirk rökbreyting byggð á leitarorðum og stöðu hefur verið úrelt og verður ekki studd í Ruby 3.0 útibúinu. Sérstaklega hefur það verið úrelt að nota síðustu röksemdina sem leitarorðafæribreytur, að senda rök sem byggja á leitarorðum sem síðustu kjötkássabreytu og að skipta síðustu röksemdinni í staðsetningar- og leitarorðafæribreytur.

    def foo(lykill: 42); enda; foo({lykill: 42}) #varað við
    def foo(**kw); enda; foo({lykill: 42}) #varað við
    def foo(lykill: 42); enda; foo(**{lykill: 42}) # Allt í lagi
    def foo(**kw); enda; foo(**{lykill: 42}) # Allt í lagi

    def foo(h, **kw); enda; foo(lykill: 42) #varað
    def foo(h, lykill: 42); enda; foo(lykill: 42) #varað við
    def foo(h, **kw); enda; foo({lykill: 42}) # Allt í lagi
    def foo(h, lykill: 42); enda; foo({lykill: 42}) # Allt í lagi

    def foo(h={}, lykill: 42); enda; foo("key" => 43, lykill: 42) #varað
    def foo(h={}, lykill: 42); enda; foo({"key" => 43, lykill: 42}) # varað við
    def foo(h={}, lykill: 42); enda; foo({"key" => 43}, lykill: 42) # Í lagi

    def foo(opt={}); enda; foo( lykill: 42 ) # OK

    def foo(h, **null); enda; foo (lykill: 1) # ArgumentError
    def foo(h, **null); enda; foo(**{lykill: 1}) # ArgumentError
    def foo(h, **null); enda; foo("str"=> 1) # ArgumentError
    def foo(h, **null); enda; foo({lykill: 1}) # Allt í lagi
    def foo(h, **null); enda; foo({"str"=> 1}) # Allt í lagi

    h = {}; def foo(*a) enda; foo(**h) # [] h = {}; def foo(a) enda; foo(**h) # {} og viðvörun
    h = {}; def foo(*a) enda; foo(h) # [{}] h = {}; def foo(a) enda; foo(h) # {}

  • Tækifæri með því að nota númeruð breytuheiti sjálfgefið fyrir blokkbreytur.

    [1, 2, 3].hver { setur @1 } # eins og [1, 2, 3].hver { |i| setur i}

  • Tilraunastuðningur fyrir svið án upphafsgildis.

    ary[..3] # sama og ary[0..3] rel.where(sala: ..100)

  • Bætti við Enumerable#tally aðferðinni, sem telur hversu oft hver þáttur kemur fyrir.

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

  • Einkaaðferðarkall leyft með „sjálf“ bókstaflega

    deffoo
    enda
    einkamál :foo
    sjálf.fó

  • Bætti við Enumerator::Lazy#eager aðferðinni til að búa til eðlilega upptalningu úr latri (Enumerator::Lazy) upptalningu.

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.upcase }.kort {|x| x + "!" }.fús
    p e.class #=> Tölunarmaður
    e.kort {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • Þróun tilrauna JIT þýðanda hefur haldið áfram, sem getur verulega bætt afköst forrita á Ruby tungumálinu. JIT þýðandinn sem lagður er til í Ruby skrifar fyrst C kóða á diskinn, eftir það kallar hann á ytri C þýðanda til að búa til vélaleiðbeiningar (GCC, Clang og Microsoft VC ++ eru studd). Nýja útgáfan útfærir aðferð fyrir innbyggða dreifingu ef nauðsyn krefur, sértæka beitingu hagræðingarhama við söfnun, sjálfgefið gildi "--jit-min-kalla" er hækkað úr 5 í 10000 og "--jit-max-cache" frá 1000 til 100.
  • Bætt afköst CGI.escapeHTML, Monitor og MonitorMixin.
  • Module#name, true.to_s, false.to_s og nil.to_s tryggja að strengur sé skilaður sem er óbreyttur fyrir tilgreindan hlut.
  • Stærð tvöfaldra skráa sem eru búnar til með RubyVM::InstructionSequence#to_binary aðferðinni hefur verið minnkað;
  • Uppfærðar útgáfur af innbyggðum íhlutum, þar á meðal
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    Strengjaskanni 1.0.3;

  • Bókasöfn færðust úr grunndreifingu yfir í ytri gimsteinapakka
    CMath (cmath gimsteinn),
    Scanf (scanf gem),
    Skel (skel gimsteinn),
    Synchronizer (sync gem),
    ThreadsWait (thwait gem),
    E2MM (e2mmap gimsteinn).

  • Sjálfgefnar stdlib einingar eru birtar á rubygems.org:
    viðmið,
    cgi,
    fulltrúi,
    getoptlong,
    net popp,
    net smtp,
    opinn 3,
    pstore,
    einhleypur. Fylgjast með einingar sem ekki voru færðar á rubygems.org
    áhorfandi,
    Hlé,
    rekjaefni,
    uri,
    yaml, sem eru aðeins sendar með rúbínkjarna.

  • Building Ruby krefst nú C þýðanda sem styður C99 staðalinn.

Heimild: opennet.ru

Bæta við athugasemd