Ruby 3.0.0预览版1发布 - ruby-lang

20-09-26 banq

我们很高兴地宣布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开发。

                   

猜你喜欢