Bildquelle
Gute Nachrichten für Entwickler - Rubin 3.0.0 ist da, eine neue Version eines dynamischen objektorientierten Programmiersprache. Laut seinen Fans enthält die neue Version das Beste aus Perl, Java, Python, Smalltalk, Eiffel, Ada und Lisp.
Die neue Version von Ruby ist die achte Hauptversion und hat viele Updates und Verbesserungen erhalten. Die Entwickler arbeiten übrigens seit etwa fünf Jahren an der dritten Version. Seine Funktionen sind hohe Leistung, Parallelität und Eingabe.
Übrigens schlug der Autor der Sprache Yukihiro Matsumoto vor fünf Jahren das Ruby 3x3-Konzept vor. Dies bedeutet, dass die Veröffentlichung von Ruby 3.0 möglich wird, nachdem die dreifache Leistungsverbesserung gegenüber Version 2.0 erreicht werden kann. In der neuesten Version wurde dies durch eine verbesserte Unterstützung der JIT-Kompilierung erreicht.
Was gibt's Neues?
- 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 # sperren, Mutex # entsperren, Mutex # sleep
- ConditionVariable # wait
- Queue # pop, SizedQueue # push
- Thread # join
- Kernel # sleep
- Process.wait
- IO # wait, IO # read, IO # write und verwandte mit ihnen Methoden
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
- Der einzeilige Mustervergleich "Operator hinzufügen - Wertvariable", der für die rechte Zuweisung von Werten verwendet wird, wurde neu gestaltet.
0 => a
p a #=> 0
{b: 0, c: 1} => {b:}
p b #=> 0
Außerdem hat sich das Verhalten von "in" geändert, jetzt wird true oder false zurückgegeben.
# version 3.0
0 in 1 #=> false
# version 2.7
0 in 1 #=> raise NoMatchingPatternError
Experimentelle Vorlage zum Finden von Werten hinzugefügt:
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
- Hash # außer Methode hinzugefügt.
h = { a: 1, b: 2, c: 3 }
p h.except(:a) #=> {:b=>2, :c=>3}
- Einzeilige Methodendefinitionen werden jetzt ohne Verwendung des Schlüsselworts "end" unterstützt.
def square(x) = x * x
- C-API - .
- IRB. , 53 (!) , Ruby 2.7.
- gem-, stdlib.