Documentation for a newer release is available. View Latest

Ruby

Ruby 2.6

Ruby 2.6 es la última versión estable de Ruby. Están incluidas muchas características y mejoras nuevas para las demandas de diversidad y expansión incremental para Ruby. Con esta actualización mayor desde la versión 2.5 de Ruby en Fedora 29 a Ruby 2.6 en Fedora 30, Fedora se convierte en la plataforma superior de desarrollo de Ruby.

Los cambios notables incluyen:

  • Ya está disponible una implementación inicial de un compilador Just-In-Time (JIT). El compilador JIT tiene como objetivo mejorar el rendimiento de la ejecución de cualquier programa Ruby. A diferencia de los compiladores JIT convencionales para otros lenguajes, el compilador JIT de Ruby realiza la compilación JIT de una manera singular: imprime el código C en un disco y ejecuta un proceso de compilación C común para generar código nativo.

    El objetivo principal de esta versión JIT es brindar la oportunidad de comprobar su funcionamiento en su plataforma e identificar riesgos de seguridad antes del lanzamiento de la versión 2.6. El compilador JIT es compatible cuando Ruby se compila con GCC, Clang o Microsoft VC++, que deben estar disponibles en tiempo de ejecución. De lo contrario, no podrá usarlo por ahora.

    Como la prevista 3 de Ruby 2.6.0, logramos que 1.7.x tenga rendimiento más rápido que Ruby 2.5 en las CPU intensivas con rendimiento no trivial de carga llamado Optcarrot. El rendimiento sobre carga de memoria intensa como aplicaciones de Rails también van a mejorar.

  • Ya está disponible el módulo experimental RubyVM::AST nuevo. Este módulo incluye un método parse que analiza una cadena de código Ruby y devuelve nodos AST (Árbol de Sintaxis Abstracta), y un método parse_file que analiza un archivo de código Ruby y devuelve nodos AST. También se ha introducido la clase RubyVM::AST::Node. Permite obtener información de lugar y nodos secundarios de objetos Node. Esta función es experimental. No se garantiza la compatibilidad de la estructura de los nodos AST.

  • Características nuevas:

    • Añade un alias nuevo then para Kernel#yield_self.

    • Agregar Random.bytes.

    • Agregar Binding#source_location. Este método devuelve el lugar origen del vínculo, una matriz de 2 elementos de FILE y LINE.

    • Agregue la opción :exception para permitir que Kernel.#system genere un error en lugar de devolver falso.

    • else sin rescue ahora provoca un error de sintaxis. [EXPERIMENTAL]

    • Los nombres constantes pueden comenzar con una letra capitalina que no sea ASCII.

    • Se introduce un intervalo infinito, (1..). Funciona como si no tuviera fin.

Han sido realizadas las siguientes mejoras de rendimiento:

  • Se acelera Proc#call porque ya no necesitamos preocuparnos por $SAFE. El benchmark lc_fizzbuzz muestra una mejora del 40% en la velocidad.

  • Se aceleró la invocación a bloque, block.call, donde se pasa el parámetro de bloque. Ruby 2.6 mejora el rendimiento de la invocación a bloque. Se observó una mejora de 2,6 veces con micro-puntos de referencia.

  • Se ha introducido el montículo transitorio (theap). theap es un montículo administrado para objetos de memoria de corta duración, apuntados por clases específicas. Por ejemplo, crear un objeto hash pequeño y de corta duración es el doble de rápido. Con la prueba de rendimiento rdoc, se observa una mejora del rendimiento del 6-7%.

Otros cambios notables desde la versión 2.5:

  • $SAFE es un estado global de proceso y podemos establecer 0 de nuevo.

  • Pasar safe_level a ERB.new está obsoleto. Los argumentos trim_mode y eoutvar ahora son argumentos de palabras clave.

  • RubyGems 3.0.0.beta2 unido.

  • Une Bundler como gem por defecto.

Consulte el anuncio de último lanzamiento para más información detallada sobre este lanzamiento.