Llançament del llenguatge de programació Ruby 2.7.0

Després d'un any de desenvolupament publicat alliberament Ruby 2.7.0, un llenguatge de programació dinàmic i orientat a objectes que és altament eficient en el desenvolupament de programes i incorpora les millors característiques de Perl, Java, Python, Smalltalk, Eiffel, Ada i Lisp. El codi del projecte es distribueix sota les llicències BSD ("2-clause BSDL") i "Ruby", que fa referència a la darrera versió de la llicència GPL i és totalment compatible amb GPLv3. Ruby 2.7 és la setena versió important després d'un procés de desenvolupament planificat que triga un any a preparar millores funcionals i produeix versions de manteniment cada 2-3 mesos.

El principal millores:

  • Experimental donar suport concordança de patrons (Coincidència de patró), que us permeten iterar sobre un objecte determinat i assignar un valor si hi ha una coincidència amb el patró.

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

    cas {a: 0, b: 1}
    en {a: 0, x: 1}
    :no disponible
    en {a: 0, b: var}
    p var # => 1
    final

  • L'intèrpret de càlculs interactius irb (REPL, Read-Eval-Print-Loop) ara inclou una edició de diverses línies, implementada mitjançant una biblioteca compatible amb readline relinear, escrit en Rubí. S'ha integrat el suport rdoc, que us permet veure informació de referència sobre classes, mòduls i mètodes especificats a l'irb. S'ha proporcionat un ressaltat en color de les línies de codi mostrades mitjançant Binding#irb i els resultats de la inspecció d'objectes de classe base.

    Llançament del llenguatge de programació Ruby 2.7.0

  • S'ha afegit un col·lector d'escombraries compacte (Compaction GC) que pot desfragmentar una regió de memòria, solucionant els problemes de rendiment i consum de memòria causats per la fragmentació de la memòria que es produeix en algunes aplicacions de Ruby multifils. Per empaquetar objectes al munt proposat Mètode GC.compact, que permet reduir el nombre de pàgines de memòria utilitzades i optimitzar l'emmagatzematge dinàmic per a les operacions
    CoW (còpia sobre escriptura).

  • Portat a terme preparant-se per separar arguments basats en la posició de la llista (“def foo(a,b,c)”) i paraules clau (“def foo(clau: val)”). La conversió automàtica d'arguments basada en paraules clau i posició ha quedat obsoleta i no s'admetrà a la branca Ruby 3.0. Concretament, s'ha obsolet utilitzar l'últim argument com a paràmetres de paraula clau, passar arguments basats en paraules clau com a darrer paràmetre hash i dividir l'últim argument en paràmetres posicionals i de paraula clau.

    def foo (clau: 42); final; foo({clau: 42}) # advertit
    def foo(**kw); final; foo({clau: 42}) # advertit
    def foo (clau: 42); final; foo(**{clau: 42}) # D'acord
    def foo(**kw); final; foo(**{clau: 42}) # D'acord

    def foo(h, **kw); final; foo(clau: 42) # advertit
    def foo(h, clau: 42); final; foo(clau: 42) # advertit
    def foo(h, **kw); final; foo({clau: 42}) # D'acord
    def foo(h, clau: 42); final; foo({clau: 42}) # D'acord

    def foo(h={}, clau: 42); final; foo("key" => 43, clau: 42) # advertit
    def foo(h={}, clau: 42); final; foo({"key" => 43, clau: 42}) # advertit
    def foo(h={}, clau: 42); final; foo({"key" => 43}, clau: 42) # D'acord

    def foo(opt={}); final; foo(clau: 42) # D'acord

    def foo(h, **nil); final; foo (clau: 1) #ArgumentError
    def foo(h, **nil); final; foo(**{clau: 1}) # ArgumentError
    def foo(h, **nil); final; foo("str" ​​​​ => 1) # ArgumentError
    def foo(h, **nil); final; foo({clau: 1}) # D'acord
    def foo(h, **nil); final; foo({"str" ​​​​ => 1}) # D'acord

    h = {}; def foo(*a) un final; foo(**h) # [] h = {}; def foo(a) un final; foo(**h) # {} i advertència
    h = {}; def foo(*a) un final; foo(h) # [{}] h = {}; def foo(a) un final; foo(h) # {}

  • Oportunitat utilitzant noms de variables numerats per defecte per als paràmetres de bloc.

    [1, 2, 3].cada { posa @1 } # igual que [1, 2, 3].cada { |i| posa jo}

  • Suport experimental per a intervals sense valor inicial.

    ary[..3] # semblant a ary[0..3] rel.on(vendes: ..100)

  • S'ha afegit el mètode Enumerable#tally, que compta el nombre de vegades que apareix cada element.

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

  • Permès cridar un mètode privat amb el literal "self"

    def foo
    final
    privat :foo
    self.foo

  • S'ha afegit el mètode Enumerator::Lazy#eager per generar una enumeració regular a partir d'un enumerador lazy (Enumerator::Lazy).

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.majúscules }.map {|x| x + "!" }.àvid
    p e.class #=> Enumerador
    p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • S'ha continuat el desenvolupament d'un compilador JIT experimental, que pot millorar significativament el rendiment de les aplicacions en llenguatge Ruby. El compilador JIT de Ruby escriu primer codi C al disc i després crida a un compilador C extern per generar instruccions de màquina (admet trucar a GCC, Clang i Microsoft VC++). La nova versió implementa un mètode per al desplegament en línia si és necessari, s'assegura l'aplicació selectiva dels modes d'optimització durant la compilació, el valor predeterminat de "--jit-min-calls" augmenta de 5 a 10000 i "--jit-max- memòria cau” de 1000 a 100 .
  • Rendiment millorat de CGI.escapeHTML, Monitor i MonitorMixin.
  • Module#name, true.to_s, false.to_s i nil.to_s asseguren que es retorna una cadena que no canvia per a l'objecte especificat.
  • S'ha reduït la mida dels fitxers binaris generats pel mètode RubyVM::InstructionSequence#to_binary;.
  • Versions actualitzades dels components integrats, inclosos
    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;

  • Les biblioteques s'han mogut del paquet base a paquets de gemmes externs
    CMath (joia cmath),
    Scanf (joia d'escaneig),
    Shell (joia de petxina)
    Sincronitzador (gem de sincronització),
    ThreadsWait (joia espera),
    E2MM (joia e2mmap).

  • Els mòduls stdlib per defecte es publiquen a rubygems.org:
    referència,
    cgi,
    delegat
    getoptlong,
    net-pop
    net-smtp
    obert3,
    pstore,
    singleton. els mòduls de monitor no s'han mogut a rubygems.org
    observador
    temps d'espera
    traçador
    uri,
    yaml, que només es subministren en nucli de rubí.

  • La construcció de Ruby ara requereix un compilador C que admeti l'estàndard C99.

Font: opennet.ru

Afegeix comentari