Ruby programazio-lengoaia 2.7.0 kaleratzea

Urtebeteko garapenaren ostean argitaratuko askatu Ruby 2.7.0, objektuetara zuzendutako programazio-lengoaia dinamikoa, programaren garapenean oso eraginkorra dena eta Perl, Java, Python, Smalltalk, Eiffel, Ada eta Lisp-en ezaugarri onenak biltzen dituena. Proiektuaren kodea BSD ("2 klausula BSDL") eta "Ruby" lizentzien arabera banatzen da, GPL lizentziaren azken bertsioari erreferentzia egiten diona eta GPLv3-rekin guztiz bateragarria dena. Ruby 2.7 planifikatutako garapen prozesu baten barruan ekoitzi den zazpigarren bertsio nagusia da, funtzioen hobekuntzarako urte bat eta 2-3 hilabeteko adabakien kaleratzea barne hartzen dituena.

Nagusia hobekuntzak:

  • Esperimentala onartzen eredu bat etortzea (Ereduen parekatzea) emandako objektuaren gainean errepikatzeko eta balio bat esleitzeko eredua bat-etortzerik badago.

    kasua [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
    pb # => 1
    pc # => [2, 3] amaiera

    kasua {a: 0, b: 1}
    {a: 0, x: 1}
    :heldu ezina
    {a: 0, b: var} atalean
    p alda # => 1
    amaiera

  • Kalkulu interaktiboen irb (REPL, Read-Eval-Print-Loop) lerro anitzeko edizioa du orain, readline bateragarria den liburutegi bat erabiliz inplementatuta. relineaRubyz idatzia. Rdoc-erako euskarria integratuta dago, eta horrek irb-en zehaztutako klase, modulu eta metodoei buruzko erreferentzia-informazioa ikusteko aukera ematen du. Binding#irb bidez erakusten den kodearekin eta oinarrizko klaseko objektuen ikuskapenaren emaitzak eskaintzen dira lerroen kolorez nabarmenduta.

    Ruby programazio-lengoaia 2.7.0 kaleratzea

  • Zabor biltzaile trinko bat (Compaction GC) gehitu da, memoria-eskualde bat desfragmentatu dezakeena, hari anitzeko Ruby aplikazio batzuen funtzionamenduan gertatzen den memoria zatikatzearen ondorioz errendimendu motelaren arazoak eta memoria-kontsumoa areagotzeko arazoak konponduz. Objektuak pila batean biltzeko proposatu GC.compact metodoa erabilitako memoria-orrialde kopurua murrizteko eta eragiketetarako pila optimizatzeko
    CoW (kopia-idazketa).

  • Egindako Zerrendako posizioan oinarritutako argumentuak bereizteko prestatzea ("def foo(a,b,c)") eta gako-hitzak ("def foo(gakoa: val)"). Gako-hitzetan eta posizioan oinarritutako argumentu-bihurketa automatikoa zaharkituta geratu da eta ez da onartuko Ruby 3.0 adarrean. Zehazki, baztertu egin da azken argumentua gako-parametro gisa erabiltzea, gako-hitzetan oinarritutako argumentuak azken hash-parametro gisa pasatzea eta azken argumentua posizio- eta gako-parametroetan zatitzea.

    def foo(gakoa: 42); amaiera; foo({gakoa: 42}) # ohartarazi du
    def foo(**kw); amaiera; foo({gakoa: 42}) #abisatu
    def foo(gakoa: 42); amaiera; foo(**{gakoa: 42}) # Ados
    def foo(**kw); amaiera; foo(**{gakoa: 42}) # Ados

    def foo(h, **kw); amaiera; foo(gakoa: 42) #abisatu
    def foo(h, klabea: 42); amaiera; foo(gakoa: 42) #abisatu
    def foo(h, **kw); amaiera; foo({gakoa: 42}) # Ados
    def foo(h, klabea: 42); amaiera; foo({gakoa: 42}) # Ados

    def foo(h={}, gakoa: 42); amaiera; foo("key" => 43, gakoa: 42) # ohartarazi
    def foo(h={}, gakoa: 42); amaiera; foo({"key" => 43, gakoa: 42}) # abisua
    def foo(h={}, gakoa: 42); amaiera; foo({"key" => 43}, gakoa: 42) # Ados

    def foo(opt={}); amaiera; foo(gakoa: 42) # Ados

    def foo(h, **nil); amaiera; foo(gakoa: 1) #ArgumentError
    def foo(h, **nil); amaiera; foo (**{gakoa: 1}) # ArgumentError
    def foo(h, **nil); amaiera; foo("str" ​​​​ => 1) # ArgumentError
    def foo(h, **nil); amaiera; foo({gakoa: 1}) # Ados
    def foo(h, **nil); amaiera; foo({"str" ​​​​ => 1}) # Ados

    h = {}; def foo(*a) end; foo(**h) # [] h = {}; def foo(a) end; foo(**h) # {} eta abisua
    h = {}; def foo(*a) end; foo(h) # [{}] h = {}; def foo(a) end; foo(h) # {}

  • Aukera bloke-parametroetarako lehenetsitako aldagai-izen zenbakidunak erabiliz.

    [1, 2, 3].bakoitzak { @1 jartzen du } # [1, 2, 3].bakoitzak { |i| jartzen dut}

  • Hasierako baliorik ez duten barrutietarako laguntza esperimentala.

    ary[..3] # ary[0..3] rel.where(salmentak: ..100)

  • Enumerable#tally metodoa gehitu da, elementu bakoitza zenbat aldiz gertatzen den.

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

  • Metodo pribatu bati "auto" literalarekin deitzeko baimena

    defoo
    amaiera
    pribatua :foo
    norbera.foo

  • Gehitu zen Enumerator::Lazy#eager metodoa zenbatzaile alferra batetik ohiko zenbaketa bat sortzeko (Enumerator::Lazy).

    a = %w (foo bar baz)
    e = a.lazy.map {|x| x.maiuskulaz }.mapa {|x| x + "!" }.gogotsu
    p e.class #=> Zenbatzailea
    e.mapa {|x| x + "?" } #=> [β€œFOO!?”, β€œBAR!?”, β€œBAZ!?”]

  • JIT konpiladore esperimental baten garapenak jarraitu du, Ruby hizkuntzako aplikazioen errendimendua nabarmen hobetu dezakeena. Ruby-n proposatutako JIT konpilatzaileak lehenik C kodea idazten du diskoan, eta ondoren kanpoko C konpiladore bati deitzen dio makinen argibideak sortzeko (GCC, Clang eta Microsoft VC ++ onartzen dira). Bertsio berriak linean hedatzeko metodo bat inplementatzen du beharrezkoa bada, optimizazio moduen aplikazio selektiboa konpilazioan zehar, "--jit-min-calls" balio lehenetsia 5etik 10000ra handitzen da eta "--jit-max-cache" 1000tik 100era.
  • CGI.escapeHTML, Monitor eta MonitorMixin-en errendimendua hobetu da.
  • Module#name, true.to_s, false.to_s eta nil.to_s zehaztutako objektuarentzat aldatu gabeko kate bat itzultzen dela ziurtatzen dute.
  • RubyVM::InstructionSequence#to_binary metodoak sortutako fitxategi bitarren tamaina murriztu da;
  • Osagai integratuen bertsio eguneratuak, barne
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    String Scanner 1.0.3;

  • Liburutegiak oinarrizko banaketatik kanpoko bitxi paketeetara pasa ziren
    CMath (cmath harribitxia),
    Scanf (scanf harribitxia),
    Maskorra (maskorraren harribitxia),
    Sinkronizatzailea (sync harribitxia),
    ThreadsWait (utzi harribitxia),
    E2MM (e2mmap harribitxia).

  • stdlib modulu lehenetsiak rubygems.org webgunean argitaratzen dira:
    erreferentzia,
    cgi,
    delegatu
    getoptlong,
    pop garbia,
    net-smtp
    irekia3,
    pstore,
    singleton. Monitorearen moduluak ez dira mugitu rubygems.org-era
    begirale
    denboraz kanpo,
    arrastoa,
    uri,
    yaml, ruby-corearekin soilik bidaltzen direnak.

  • Ruby eraikitzeak C99 estandarra onartzen duen C konpiladore bat behar du orain.

Iturria: opennet.ru

Gehitu iruzkin berria