Sumber gambar
Kabar baik bagi para pengembang - Ruby 3.0.0 telah hadir, rilis baru dari bahasa pemrograman berorientasi objek yang dinamis. Menurut penggemarnya, versi baru ini menyertakan yang terbaik dari Perl, Java, Python, Smalltalk, Eiffel, Ada dan Lisp.
Rilis Ruby baru adalah rilis utama kedelapan dan telah menerima banyak pembaruan dan peningkatan. Omong-omong, para pengembang telah mengerjakan versi ketiga selama sekitar lima tahun. Fitur-fiturnya adalah kinerja tinggi, konkurensi, dan pengetikan.
Ngomong-ngomong, lima tahun lalu yang sama, penulis bahasa Yukihiro Matsumoto mengusulkan konsep Ruby 3x3. Ini menyiratkan bahwa rilis Ruby 3.0 akan dimungkinkan setelah dapat mencapai peningkatan kinerja tiga kali lipat dari versi 2.0. Dalam rilis terbaru, ini telah dicapai melalui dukungan kompilasi JIT yang ditingkatkan.
Apa yang baru?
- 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 dengan mereka metode
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
- Pencocokan pola satu baris "Tambahkan operator - nilai-variabel", yang digunakan untuk penetapan nilai di sebelah kanan, telah didesain ulang.
0 => a
p a #=> 0
{b: 0, c: 1} => {b:}
p b #=> 0
Selain itu, perilaku "dalam" telah diubah, sekarang mengembalikan benar atau salah.
# version 3.0
0 in 1 #=> false
# version 2.7
0 in 1 #=> raise NoMatchingPatternError
Menambahkan template eksperimental untuk menemukan nilai:
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
- Menambahkan Hash # kecuali metode.
h = { a: 1, b: 2, c: 3 }
p h.except(:a) #=> {:b=>2, :c=>3}
- Sekarang ada dukungan untuk definisi metode satu baris tanpa menggunakan kata kunci "akhir".
def square(x) = x * x
- C-API - .
- IRB. , 53 (!) , Ruby 2.7.
- gem-, stdlib.