Source de l' image
Bonne nouvelle pour les développeurs -Ruby 3.0.0est sorti, une nouvelle version d'un langage de programmation dynamique orienté objet. Selon ses fans, la nouvelle version comprend le meilleur de Perl, Java, Python, Smalltalk, Eiffel, Ada et Lisp.
La nouvelle version de Ruby est la huitième version majeure et a reçu de nombreuses mises à jour et améliorations. Au fait, les développeurs travaillent sur la troisième version depuis environ cinq ans. Ses fonctionnalités sont hautes performances, simultanéité et saisie.
D'ailleurs, il y a cinq ans, l'auteur du langage Yukihiro Matsumoto a proposé le concept Ruby 3x3. Cela implique que la sortie de Ruby 3.0 deviendra possible après trois fois l'amélioration des performances par rapport à la version 2.0. Dans la dernière version, cela a été réalisé grâce à une meilleure prise en charge de la compilation JIT.
Quoi de neuf?
- RBS, Ruby. RBS . : , , , . , TypeProf, , 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. , . , , . .
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
- fiber- Fiber#scheduler, , . , :
- Mutex # lock, Mutex # unlock, Mutex # sleep
- ConditionVariable # wait
- Queue # pop, SizedQueue # push
- Thread # join
- Kernel # sleep
- Process.wait
- IO # wait, IO # read, IO # write and related avec eux méthodes
require 'async'
require 'net/http'
require 'uri'
Async do
["ruby", "python", "c"].each do |topic|
Async do
Net::HTTP.get(URI "https://www.google.com/search?q=#{topic}")
end
end
end
- Les one-liners du pattern matching "Add operator - variable-value", qui est utilisé pour l'affectation des valeurs à droite, ont été retravaillés.
0 => a
p a #=> 0
{b: 0, c: 1} => {b:}
p b #=> 0
De plus, le comportement de "in" a changé, il renvoie maintenant vrai ou faux.
# version 3.0
0 in 1 #=> false
# version 2.7
0 in 1 #=> raise NoMatchingPatternError
Ajout d'un modèle expérimental pour trouver des valeurs:
case ["a", 1, "b", "c", 2, "d", "e", "f", 3]
in [*pre, String => x, String => y, *post]
p pre #=> ["a", 1]
p x #=> "b"
p y #=> "c"
p post #=> [2, "d", "e", "f", 3]
end
- Ajout de Hash # sauf la méthode.
h = { a: 1, b: 2, c: 3 }
p h.except(:a) #=> {:b=>2, :c=>3}
- Il existe désormais un support pour les définitions de méthode sur une ligne sans utiliser le mot clé "end".
def square(x) = x * x
- C-API - .
- IRB. , 53 (!) , Ruby 2.7.
- gem-, stdlib.