幾個月前 Ruby 程式語言的建立者和首席設計師 Yukihiro Matsumoto(松本行弘)表示 Ruby 3.0 將在聖誕這天釋出,現在根據官方資訊,該版本如約而至。
松本表示,Ruby 3 比 Ruby 2 快 3 倍。
此版本主要目標包括:
效能
MJIT併發
RactorFiber Scheduler型別(靜態分析)
RBSTypeProfRBS
RBS 是一種描述 Ruby 程式型別的語言。型別檢查器(包括型別分析器和其他支援 RBS 的工具)將透過 RBS 定義更好地理解 Ruby 程式。開發者可以寫下類和模組的定義:類中定義的方法、例項變數及其型別以及繼承/混合關係。RBS 的目標是支援 Ruby 程式中常見的模式,它允許編寫高階型別,包括聯合型別、方法過載和泛型。它還支援帶有介面型別的 duck typing。
Ruby 3.0 附帶有rbsgem,它可以解析和處理用 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 endend
Ractor(實驗階段)
Ractor 是類似於併發抽象的 Actor 模型,旨在提供並行執行功能而無需擔心執行緒安全。為了限制共享物件,Ractor 對 Ruby 的語法引入了一些限制,以下程式用兩個 ractor 平行計算 prime?,速度大約快 2 倍。
require 'prime'# n.prime? with sent integers in r1, r2 run in parallelr1, r2 = *(1..2).map do Ractor.new do n = Ractor.recv n.prime? endend# send parametersr1.send 2**61 - 1r2.send 2**61 + 15# wait for the results of expr1, expr2p r1.take #=> truep r2.take #=> true
Scheduler
引入Thread#scheduler用於攔截阻塞操作,允許輕量級的併發,而無需更改現有程式碼。
當前支援的類/方法:
Mutex#lock, Mutex#unlock, Mutex#sleepConditionVariable#wait
Queue#pop, SizedQueue#pushThread#join
Kernel#sleep
IO#wait, IO#read, IO#write 與相關方法如 #wait_readable, #gets, #puts不支援 IO#select
Ruby 3 還重新設計了單行匹配模式:
添加了 =>:
0 => ap a #=> 0{b: 0, c: 1} => {b:}p b #=> 0
in 用於返回 true/false:
# version 3.00 in 1 #=> false# version 2.70 in 1 #=> raise NoMatchingPatternError
詳情檢視釋出說明:
https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released
下載:
https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.gz
最新評論