Documentation for a newer release is available. View Latest

Ruby

Ruby 2.6

Ruby 2.6 és la versió estable més recent de Ruby. S’inclouen moltes funcions noves i millores per a les demandes cada vegada més diverses i en expansió de Ruby. Amb aquesta actualització important de Ruby 2.5 a Fedora 29 a Ruby 2.6 a Fedora 30, Fedora es converteix en la plataforma de desenvolupament Ruby superior.

Els canvis notables inclouen:

  • Ara està disponible una implementació inicial d’un compilador Just-In-Time (JIT). El compilador JIT té com a objectiu millorar el rendiment de qualsevol execució de programa Ruby. A diferència dels compiladors JIT ordinaris per a altres llenguatges, el compilador JIT de Ruby fa la compilació JIT d’una manera única, que imprimeix codi C a un disc i genera un procés de compilador C comú per generar codi natiu.

    El propòsit principal d’aquest llançament JIT és proporcionar una oportunitat per comprovar si funciona per a la vostra plataforma i per descobrir riscos de seguretat abans del llançament 2.6. El compilador JIT és compatible quan Ruby es construeix amb GCC, Clang o Microsoft VC++, que ha d’estar disponible en temps d’execució. En cas contrari, no podeu utilitzar-lo de moment.

    A partir de Ruby 2.6.0 preview3, hem aconseguit un rendiment 1,7 vegades més ràpid que Ruby 2.5 en càrrega de treball de referència no trivial intensiva en CPU anomenada Optcarrot. El rendiment en càrrega de treball intensiva en memòria com l’aplicació Rails també es millorarà.

  • Ara està disponible un nou mòdul experimental RubyVM::AST. Aquest mòdul té un mètode parse que analitza un codi ruby donat de cadena i retorna nodes AST (Abstract Syntax Tree), i un mètode parse_file que analitza un fitxer de codi ruby donat i retorna nodes AST. També s’introdueix una classe RubyVM::AST::Node. Podeu obtenir informació d’ubicació i nodes fills dels objectes Node. Aquesta característica és experimental. No es garanteix la compatibilitat de l’estructura dels nodes AST.

  • Noves característiques:

    • Afegeix un nou àlies then a Kernel#yield_self.

    • Afegeix Random.bytes.

    • Afegeix Binding#source_location. Aquest mètode retorna la ubicació d’origen de l’enllaç, una matriu de 2 elements de FILE i LINE.

    • Afegeix l’opció :exception per permetre que Kernel.#system generi un error en lloc de retornar false.

    • else sense rescue ara causa un error de sintaxi. [EXPERIMENTAL]

    • Els noms de constants poden començar amb una lletra majúscula no ASCII.

    • S’introdueix un rang sense fi, (1..). Funciona com si no tingués fi.

S’han fet les següents millores de rendiment:

  • S’ha accelerat Proc#call perquè ja no cal preocupar-se de $SAFE. La referència lc_fizzbuzz mostra una millora de velocitat del 40%.

  • S’ha accelerat block.call on el bloc es passa com a paràmetre de bloc. Ruby 2.6 millora el rendiment de la crida de bloc passat. Es pot observar una millora de 2,6x amb micro-referències.

  • S’ha introduït Transient Heap (theap). theap és un heap gestionat per a objectes de memòria de curta durada que són apuntats per classes específiques. Per exemple, fer un objecte Hash petit i de curta durada és el doble de ràpid. Amb la referència rdoc, s’observa una millora de rendiment del 6-7%.

Altres canvis notables des de la versió 2.5:

  • $SAFE és un estat global del procés i podem establir 0 de nou.

  • Passar safe_level a ERB.new està obsolet. Els arguments trim_mode i eoutvar ara són arguments de paraula clau.

  • S’ha fusionat RubyGems 3.0.0.beta2.

  • Fusiona Bundler com a gem predeterminat.

Consulteu l’anunci de llançament upstream per obtenir informació més detallada sobre aquest llançament.