„Ruby“ programavimo kalbos 2.7.0 išleidimas

Po metų plėtros paskelbti paleisti Rubinas 2.7.0, dinamiška į objektus orientuota programavimo kalba, kuri yra labai efektyvi kuriant programas ir apima geriausias Perl, Java, Python, Smalltalk, Eiffel, Ada ir Lisp savybes. Projekto kodas platinamas pagal BSD („2-clause BSDL“) ir „Ruby“ licencijas, kurios nurodo naujausią GPL licencijos versiją ir yra visiškai suderinamos su GPLv3. „Ruby 2.7“ yra septintoji pagrindinė versija, kuri bus išleista vykdant planuojamą kūrimo procesą, apimantį vienerių metų atidėjimą funkcijų patobulinimams ir 2–3 mėnesių pataisos išleidimą.

pagrindinis patobulinimai:

  • eksperimentinis parama modelio atitikimas (Rašto derinimas) kartoti nurodytą objektą ir priskirti reikšmę, jei yra šablono atitiktis.

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

    atvejis {a: 0, b: 1}
    in{a:0,x:1}
    : nepasiekiamas
    {a: 0, b: var}
    p var #=> 1
    pabaiga

  • Interaktyvių skaičiavimų apvalkalas irb (REPL, Read-Eval-Print-Loop) dabar turi kelių eilučių redagavimo galimybę, įdiegtą naudojant su skaitymo linija suderinamą biblioteką persirengtiparašyta rubinu. Integruotas rdoc palaikymas, leidžiantis peržiūrėti informacinę informaciją apie nurodytas klases, modulius ir metodus irb. Pateikiamas spalvotas eilučių su kodu, rodomu per Binding#irb, paryškinimas ir bazinės klasės objektų tikrinimo rezultatai.

    „Ruby“ programavimo kalbos 2.7.0 išleidimas

  • Pridėtas kompaktiškas šiukšlių rinktuvas (Compaction GC), galintis atlikti atminties srities defragmentavimą, išspręsdamas lėto veikimo ir padidėjusio atminties sunaudojimo problemas dėl atminties suskaidymo, atsirandančio veikiant kai kurioms kelių gijų Ruby programoms. Norėdami sukrauti daiktus ant krūvos pasiūlė GC.compact metodas, skirtas sumažinti naudojamų atminties puslapių skaičių ir optimizuoti krūvą operacijoms
    COW (kopijuoti ant rašymo).

  • Atliko ruošiamasi atskirti argumentus pagal poziciją sąraše ("def foo(a,b,c)") ir raktinius žodžius ("def foo(key: val)"). Automatinis argumentų konvertavimas pagal raktinius žodžius ir poziciją buvo nebenaudojamas ir nebus palaikomas Ruby 3.0 šakoje. Visų pirma, buvo nebenaudojama naudoti paskutinį argumentą kaip raktinio žodžio parametrus, perduoti raktiniais žodžiais pagrįstus argumentus kaip paskutinį maišos parametrą ir padalinti paskutinį argumentą į pozicijos ir raktinio žodžio parametrus.

    def foo(raktas: 42); galas; foo({key: 42}) #warned
    def foo(**kw); galas; foo({key: 42}) #warned
    def foo(raktas: 42); galas; foo(**{key: 42}) # Gerai
    def foo(**kw); galas; foo(**{key: 42}) # Gerai

    def foo(h, **kw); galas; foo(raktas: 42) #perspėjo
    def foo(h, raktas: 42); galas; foo(raktas: 42) #perspėjo
    def foo(h, **kw); galas; foo({key: 42}) # Gerai
    def foo(h, raktas: 42); galas; foo({key: 42}) # Gerai

    def foo(h={}, raktas: 42); galas; foo("raktas" => 43, raktas: 42) #perspėta
    def foo(h={}, raktas: 42); galas; foo({"key" => 43, raktas: 42}) # įspėtas
    def foo(h={}, raktas: 42); galas; foo({"key" => 43}, raktas: 42) # Gerai

    def foo(opt={}); galas; foo(raktas: 42) # Gerai

    def foo(h, **nul); galas; foo(key: 1) # ArgumentError
    def foo(h, **nul); galas; foo(**{key: 1}) # Argumenterror
    def foo(h, **nul); galas; foo("str" ​​=> 1) # Argumento klaida
    def foo(h, **nul); galas; foo({key: 1}) # Gerai
    def foo(h, **nul); galas; foo({"str" ​​​​=> 1}) # Gerai

    h = {}; def foo(*a) pabaiga; foo(**h) # [] h = {}; def foo(a) end; foo(**h) # {} ir įspėjimas
    h = {}; def foo(*a) pabaiga; foo(h) # [{}] h = {}; def foo(a) end; foo(h) # {}

  • Galimybė bloko parametrams naudojant sunumeruotus numatytuosius kintamųjų pavadinimus.

    [1, 2, 3].kiekvienas { deda @1 } # patinka [1, 2, 3].kiekvienas { |i| deda aš }

  • Eksperimentinis palaikymas diapazonams be pradinės vertės.

    ary[..3] # tas pats kaip ary[0..3] rel.where(pardavimai: ..100)

  • Pridėtas metodas Enumerable#tally, kuris skaičiuoja, kiek kartų kiekvienas elementas atsiranda.

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

  • Leidžiamas privatus metodo iškvietimas su „savęs“ pažodžiu

    deffoo
    pabaiga
    privatus :foo
    pats.foo

  • Pridėtas Enumerator::Lazy#eager metodas, leidžiantis generuoti reguliarų surašymą iš tinginio (Enumerator::Lazy) sąrašo.

    a = %w(foo bar baz)
    e = a.tingus.žemėlapis {|x| x.upcase }.map {|x| x + "!" }.eager
    p e.klasė #=> Surašinėtojas
    e.žemėlapis {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • Buvo tęsiamas eksperimentinio JIT kompiliatoriaus kūrimas, kuris gali žymiai pagerinti programų našumą Ruby kalba. Ruby siūlomas JIT kompiliatorius pirmiausia įrašo C kodą į diską, o po to iškviečia išorinį C kompiliatorių, kad generuotų mašinos instrukcijas (palaikomos GCC, Clang ir Microsoft VC ++). Naujoje versijoje įdiegtas tiesioginio diegimo metodas, jei reikia, pasirinktinis optimizavimo režimų taikymas kompiliavimo metu, numatytoji "--jit-min-calls" reikšmė padidinama nuo 5 iki 10000 ir "--jit-max-cache" nuo 1000 iki 100.
  • Patobulintas CGI.escapeHTML, Monitor and MonitorMixin veikimas.
  • Modulio#pavadinimas, true.to_s, false.to_s ir nil.to_s užtikrina, kad nurodytam objektui būtų grąžinta nepakitusi eilutė.
  • Sumažintas dvejetainių failų, sugeneruotų RubyVM::InstructionSequence#to_binary metodu, dydis;
  • Atnaujintos integruotų komponentų versijos, įskaitant
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    Styginių skaitytuvas 1.0.3;

  • Bibliotekos iš bazinio platinimo perkeltos į išorinius brangakmenių paketus
    CMath (cmath brangakmenis),
    Scanf (scanf brangakmenis),
    Lukštas (lukšto brangakmenis),
    Sinchronizatorius (sinchronizavimo perlas),
    ThreadsWait (thwait gem),
    E2MM (e2mmap brangakmenis).

  • Numatytieji stdlib moduliai paskelbti rubygems.org:
    etalonas,
    cgi,
    deleguoti,
    pasiilgti,
    tinklo pop,
    neto smtp,
    atidaryti3,
    parduotuvė,
    vienvietis. Monitoriaus moduliai neperkelti į rubygems.org
    stebėtojas,
    laikas baigėsi,
    žymeklis,
    uri,
    yaml, kurie pristatomi tik su rubino šerdimi.

  • Kuriant Ruby dabar reikalingas C kompiliatorius, palaikantis C99 standartą.

Šaltinis: opennet.ru

Добавить комментарий