我们很高兴地宣布Ruby 3.0.0-preview1的发布。
它引入了许多新功能和性能改进。
RBS
RBS是一种描述Ruby程序类型的语言。类型检查器(包括类型分析器和其他支持RBS的工具)将通过RBS定义更好地理解Ruby程序。
您可以写下类和模块的定义:类中定义的方法,实例变量及其类型以及继承/混合关系。RBS的目标是支持Ruby程序中常见的模式,它允许编写高级类型,包括联合类型,方法重载和泛型。它还支持带有接口类型的鸭子输入。
Ruby 3.0附带有rbsgem,它可以解析和处理用RBS编写的类型定义。
以下是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(实验性)
Ractor是类似于并发抽象的Actor模型,旨在提供并行执行功能而无需担心线程安全。
您可以制造多个ractors ,也可以并行运行它们。Ractor可以创建线程安全的并行程序,因为ractor无法共享正常对象。他们之间的通信支持消息传递。
为了限制共享对象,Ractor对Ruby的语法引入了一些限制。
规格和实现方式不会很成熟意味着将来需要更改,因此此功能被标记为实验性功能,如果创建了Ractor,则会显示实验性功能警告。
下面的小程序prime?与两个Ractor并行计算,并且与顺序程序相比,使用两个或更多核的速度大约快x2倍。
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
|
调度程序(实验性)
Thread#scheduler引入用于拦截阻塞操作。这允许轻量级的并发,而无需更改现有代码。
当前支持的类/方法:
- Mutex#lock,Mutex#unlock,Mutex#sleep
- ConditionVariable#wait
- Queue#pop, SizedQueue#push
- Thread#join
- Kernel#sleep
- IO#wait,IO#read,IO#write和相关方法(例如#wait_readable,#gets,#puts等)。
- IO#select是不支持。
当前并发的入口点是Fiber.schedule{...},在Ruby 3发布时,它可能会发生变化。
注意:此功能是实验性的。名称和功能都将在下一个预览版本中更改。
其他值得注意的新功能点击标题见原文。
下载:
https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0-preview1.tar.gz
https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0-preview1.zip
Ruby最初由Matz(Yukihiro Matsumoto)于1993年开发,现在已作为开源开发。它运行在多个平台上,并在全世界范围内广泛用于Web开发。