Lanzamiento de Ruby 3.0, 3 veces más rápido que Ruby 2

Hace unos meses, el creador y diseñador jefe del lenguaje de programación Ruby, Yukihiro Matsumoto (Yukihiro Matsumoto) dijo que Ruby  3.0 se lanzará el día de Navidad , y ahora según información oficial, la versión llegará según lo programado .

Matsumoto dijo que Ruby 3 es 3 veces más rápido que Ruby 2.

Los principales objetivos de esta versión incluyen:

  • actuación
    • MJIT
  • Concurrente
    • Ractor
    • Programador de fibra
  • Tipo (análisis estático)
    • RBS
    • TypeProf

RBS

RBS es un lenguaje para describir tipos de programas Ruby. Los verificadores de tipos (incluidos los analizadores de tipos y otras herramientas que admiten RBS) utilizarán definiciones de RBS para comprender mejor los programas de Ruby. Los desarrolladores pueden escribir las definiciones de clases y módulos: métodos definidos en la clase, variables de instancia y sus tipos, y relaciones de herencia / mezcla. El objetivo de RBS es admitir patrones comunes en programas Ruby. Permite escribir tipos avanzados, incluidos tipos de unión, sobrecarga de métodos y genéricos. También admite la escritura de pato con tipos de interfaz.

Ruby 3.0 viene con rbsgem, que puede analizar y procesar definiciones de tipo escritas en RBS:

module ChatApp
  VERSION: String

  class Channel
    attr_reader name: String
    attr_reader messages: Array[Message]
    attr_reader users: Array[User | Bot]              # `|` means union types, `User` or `Bot`.

    def initialize: (String) -> void

    def post: (String, from: User | Bot) -> Message   # Method overloading is supported.
            | (File, from: User | Bot) -> Message
  end
end

Ractor (etapa experimental)

Ractor es un modelo de actor similar a la abstracción de concurrencia, diseñado para proporcionar capacidades de ejecución paralela sin preocuparse por la seguridad de los subprocesos. Para limitar los objetos compartidos, Ractor introduce algunas restricciones en la sintaxis de Ruby. El siguiente programa usa dos reactores para calcular primo? En paralelo, que es aproximadamente 2 veces más rápido.

require 'prime'

# n.prime? with sent integers in r1, r2 run in parallel
r1, r2 = *(1..2).map do
  Ractor.new do
    n = Ractor.recv
    n.prime?
  end
end

# send parameters
r1.send 2**61 - 1
r2.send 2**61 + 15

# wait for the results of expr1, expr2
p r1.take #=> true
p r2.take #=> true

Programador (fase experimental)

Introducido Thread#schedulerpara interceptar operaciones de bloqueo, lo que permite una simultaneidad ligera sin cambiar el código existente.

Clases / métodos soportados actualmente:

  • Mutex#lockMutex#unlockMutex#sleep
  • ConditionVariable#wait
  • Queue#popSizedQueue#push
  • Thread#join
  • Kernel#sleep
  • IO#waitIO#readIO#write Y métodos relacionados, tales como  #wait_readable#gets#puts 
  • no apoyo IO#select 

Ruby 3 también rediseñó el modo de coincidencia de una sola línea:

Agregado =>:

0 => a
p a #=> 0

{b: 0, c: 1} => {b:}
p b #=> 0

in se usa para devolver verdadero / falso:

# version 3.0
0 in 1 #=> false

# version 2.7
0 in 1 #=> raise NoMatchingPatternError

Consulte las notas de la versión para obtener más detalles:

https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released

descargar:

  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.gz

    SIZE: 19539509
    SHA1: 233873708c1ce9fdc295e0ef1c25e64f9b98b062
    SHA256: a13ed141a1c18eb967aac1e33f4d6ad5f21be1ac543c344e0d6feeee54af8e28
    SHA512: e62f4f63dc12cff424e8a09adc06477e1fa1ee2a9b2b6e28ca22fd52a211e8b8891c0045d47935014a83f2df2d6fc7c8a4fd87f01e63c585afc5ef753e1dd1c1
    
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.xz

    SIZE: 14374176
    SHA1: c142899d70a1326c5a71311b17168f98c15e5d89
    SHA256: 68bfaeef027b6ccd0032504a68ae69721a70e97d921ff328c0c8836c798f6cb1
    SHA512: 2a23c2894e62e24bb20cec6b2a016b66d7df05083668726b6f70af8338211cfec417aa3624290d1f5ccd130f65ee7b52b5db7d428abc4a9460459c9a5dd1a450
    
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.zip

    SIZE: 23862057
    SHA1: 2a9629102d71c7fe7f31a8c91f64e570a40d093c
    SHA256: a5e4fa7dc5434a7259e9a29527eeea2c99eeb5e82708f66bb07731233bc860f4
    SHA512: e5bf742309d79f05ec1bd1861106f4b103e4819ca2b92a826423ff451465b49573a917cb893d43a98852435966323e2820a4b9f9377f36cf771b8c658f80fa5b
    

Supongo que te gusta

Origin www.oschina.net/news/124640/ruby-3-0-released
Recomendado
Clasificación