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 rbs
gem, 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#scheduler
para interceptar operaciones de bloqueo, lo que permite una simultaneidad ligera sin cambiar el código existente.
Clases / métodos soportados actualmente:
Mutex#lock
,Mutex#unlock
,Mutex#sleep
ConditionVariable#wait
Queue#pop
,SizedQueue#push
Thread#join
Kernel#sleep
IO#wait
,IO#read
,IO#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