Há alguns meses, o criador e designer chefe da linguagem de programação Ruby, Yukihiro Matsumoto (Yukihiro Matsumoto) disse que o Ruby 3.0 será lançado no dia de Natal , e agora de acordo com informações oficiais, a versão chegará conforme previsto .
Matsumoto disse que Ruby 3 é 3 vezes mais rápido que Ruby 2.
Os principais objetivos deste lançamento incluem:
- desempenho
- MJIT
- Concorrente
- Ractor
- Programador de fibra
- Tipo (análise estática)
- RBS
- TypeProf
RBS
RBS é uma linguagem para descrever tipos de programas Ruby. Os verificadores de tipo (incluindo analisadores de tipo e outras ferramentas que suportam RBS) usarão as definições RBS para entender melhor os programas Ruby. Os desenvolvedores podem escrever as definições de classes e módulos: métodos definidos na classe, variáveis de instância e seus tipos e relacionamentos de herança / combinação. O objetivo do RBS é oferecer suporte a padrões comuns em programas Ruby. Ele permite escrever tipos avançados, incluindo tipos de união, sobrecarga de método e genéricos. Ele também suporta digitação de pato com tipos de interface.
Ruby 3.0 vem com rbs
gem, que pode analisar e processar definições de tipo escritas em 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
Rator (estágio experimental)
Ractor é um modelo de ator semelhante à abstração de simultaneidade, projetado para fornecer recursos de execução paralela sem se preocupar com a segurança do thread. A fim de limitar objetos compartilhados, Ractor introduz algumas restrições na sintaxe de Ruby.O programa a seguir usa dois reatores para calcular primos em paralelo, que é cerca de 2 vezes mais 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
Scheduler (fase experimental)
Introduzido Thread#scheduler
para interceptar operações de bloqueio, permitindo concorrência leve sem alterar o código existente.
Classes / métodos atualmente suportados:
Mutex#lock
,Mutex#unlock
,Mutex#sleep
ConditionVariable#wait
Queue#pop
,SizedQueue#push
Thread#join
Kernel#sleep
IO#wait
,IO#read
,IO#write
E métodos relacionados, tais como#wait_readable
,#gets
,#puts
- não suporta
IO#select
Ruby 3 também redesenhou o modo de correspondência de linha única:
Adicionado =>:
0 => a
p a #=> 0
{b: 0, c: 1} => {b:}
p b #=> 0
in é usado para retornar verdadeiro / falso:
# version 3.0
0 in 1 #=> false
# version 2.7
0 in 1 #=> raise NoMatchingPatternError
Consulte as notas de lançamento para obter detalhes:
https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released
baixar:
-
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