Liberazione di a lingua di prugrammazione Ruby 2.7.0

Dopu un annu di sviluppu publicatu liberazione Rubinu 2.7.0, una lingua di prugrammazione dinamica, orientata à l'ughjettu, chì hè assai efficace in u sviluppu di u prugramma è incorpora e migliori funzioni di Perl, Java, Python, Smalltalk, Eiffel, Ada è Lisp. U codice di u prughjettu hè distribuitu sottu a licenza BSD ("2-clause BSDL") è "Ruby", chì si riferisce à l'ultima versione di a licenza GPL è hè cumplettamente cumpatibile cù GPLv3. Ruby 2.7 hè a settima liberazione maiò dopu à un prucessu di sviluppu pianificatu chì dura un annu per preparà e migliure funziunali è pruduce e versioni di mantenimentu ogni 2-3 mesi.

menu migliurà:

  • Sperimentale supportu currispundenza di mudellu (Corrispondenza di mudellu), chì permettenu di iterà nantu à un oggettu datu è assignà un valore s'ellu ci hè un match à u mudellu.

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

    casu {a: 0, b: 1}
    in {a: 0, x: 1}
    : indisponible
    in {a: 0, b: var}
    p var # => 1
    fine

  • A cunchiglia di calculi interattivi irb (REPL, Read-Eval-Print-Loop) presenta avà una edizione multi-linea, implementata cù una biblioteca compatibile cù readline. reline, scrittu in Ruby. U supportu rdoc hè statu integratu, chì vi permette di vede l'infurmazioni di riferimentu nantu à classi, moduli è metudi specificati in irb. Fornitu l'evidenziazione di u culore di e linee di codice mostrate attraversu Binding#irb è i risultati di l'ispezione di l'uggetti di a classe di basa.

    Liberazione di a lingua di prugrammazione Ruby 2.7.0

  • Aggiuntu un cullettore di basura compactu (Compaction GC) chì pò defragmentà una regione di memoria, risolve i prublemi di rendiment è di cunsumu di memoria causati da a frammentazione di memoria chì si trova in alcune applicazioni Ruby multi-threaded. Per imballà l'uggetti nantu à u munzeddu prupostu U metudu GC.compact, chì permette di riduce u numeru di pagine di memoria utilizati è ottimisà u munzeddu per l'operazioni
    CoW (copia in scrittura).

  • Compiu preparanu à separà argumenti basati nantu à a pusizione di lista ("def foo(a,b,c)") è e parolle chjave ("def foo(key: val)"). A cunversione automatica di l'argumentu basatu nantu à e parolle chjave è a pusizione hè stata deprecata è ùn serà micca supportata in a branche Ruby 3.0. In particulare, hà deprecated usendu l'ultimu argumentu cum'è paràmetri di keyword, passendu argumenti basati in keyword cum'è l'ultimu paràmetru di hash, è splitting the last argument in positional and keyword parameters.

    def foo (key: 42); fine; foo ({key: 42}) # avvistu
    def foo(**kw); fine; foo ({key: 42}) # avvistu
    def foo (key: 42); fine; foo(**{key: 42}) # OK
    def foo(**kw); fine; foo(**{key: 42}) # OK

    def foo(h, **kw); fine; foo (chjave: 42) # avvistatu
    def foo(h, chjave: 42); fine; foo (chjave: 42) # avvistatu
    def foo(h, **kw); fine; foo ({key: 42}) # OK
    def foo(h, chjave: 42); fine; foo ({key: 42}) # OK

    def foo(h={}, chjave: 42); fine; foo("key" => 43, chjave: 42) # avvistatu
    def foo(h={}, chjave: 42); fine; foo({"key" => 43, chjave: 42}) # avvistu
    def foo(h={}, chjave: 42); fine; foo({"key" => 43}, chjave: 42) # OK

    def foo (opt = {}); fine; foo(key: 42) # OK

    def foo(h, **nil); fine; foo(key: 1) #ArgumentError
    def foo(h, **nil); fine; foo(**{key: 1}) # ArgumentError
    def foo(h, **nil); fine; foo("str" ​​​​ => 1) # ArgumentError
    def foo(h, **nil); fine; foo ({key: 1}) # OK
    def foo(h, **nil); fine; foo({"str" ​​​​ => 1}) # OK

    h = {}; def foo(*a) a fine; foo(**h) # [] h = {}; def foo(a) a fine; foo(**h) # {} è avvirtimentu
    h = {}; def foo(*a) a fine; foo(h) # [{}] h = {}; def foo(a) a fine; foo(h) # {}

  • uppurtunità utilizendu nomi di variàbili numerati per difettu per i paràmetri di blocchi.

    [1, 2, 3].ognunu { mette @1 } # listessu cum'è [1, 2, 3].ognunu { |i| mette i }

  • Supportu sperimentale per intervalli senza valore iniziale.

    ary[..3] # simili à ary[0..3] rel.where (vendite: ..100)

  • Added Enumerable#tally metudu, chì conta u numeru di volte chì ogni elementu appare.

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

  • Permette di chjamà un metudu privatu cù u literale "self"

    def foo
    fine
    privatu :foo
    self.foo

  • Added Enumerator::Lazy#eager metudu per generà una enumerazione regulare da un enumeratore lazy (Enumerator::Lazy).

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

  • U sviluppu di un compilatore JIT sperimentale hà cuntinuatu, chì pò migliurà significativamente u rendiment di l'applicazioni in a lingua Ruby. U compilatore JIT di Ruby scrive prima u codice C à u discu, è poi chjamà un compilatore C esternu per generà struzzioni di a macchina (supporta chjamà GCC, Clang è Microsoft VC++). A nova versione implementa un metudu per l'implementazione in linea se ne necessariu, l'applicazione selettiva di i modi di ottimisazione durante a compilazione hè assicurata, u valore predeterminatu di "--jit-min-calls" hè aumentatu da 5 à 10000, è "--jit-max- cache" da 1000 à 100 .
  • Prestazione mejorata di CGI.escapeHTML, Monitor è MonitorMixin.
  • Module#name, true.to_s, false.to_s, è nil.to_s assicuranu chì una stringa hè restituita chì ùn hè micca cambiata per l'ughjettu specificatu.
  • A dimensione di i schedarii binari generati da u metudu RubyVM::InstructionSequence#to_binary; hè stata ridutta.
  • Versioni aghjurnate di cumpunenti integrati, cumprese
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    StringScanner 1.0.3;

  • E biblioteche sò state spustate da u pacchettu di basa à i pacchetti di gemme esterni
    CMath (cmath gemma),
    Scanf (scanf gem),
    Shell (gemma di cunchiglia)
    Synchronizer (sync gem),
    ThreadsWait (aspittà gemma),
    E2MM (e2mmap gem).

  • I moduli stdlib predeterminati sò publicati in rubygems.org:
    benchmark,
    cgi,
    delegatu
    getoptlong,
    net-pop,
    net-smtp
    aperta 3,
    pstore,
    singleton. i moduli di monitor ùn sò micca spustati in rubygems.org
    observatore
    pausa
    tracciatore
    uri,
    yaml, chì sò furnuti solu in ruby-core.

  • Custruì Ruby avà bisognu di un compilatore C chì sustene u standard C99.

Source: opennet.ru

Add a comment