查看原文
其他

Ruby 3.0发布,比 Ruby2快3倍

oschina OSC开源社区 2021-09-10

喜欢就关注我们吧!

几个月前 Ruby 编程语言的创建者和首席设计师 Yukihiro Matsumoto(松本行弘)表示 Ruby 3.0 将在圣诞这天发布,现在根据官方信息,该版本如约而至。

松本表示,Ruby 3 比 Ruby 2 快 3 倍。

此版本主要目标包括:
  • 性能
    • MJIT
  • 并发
    • Ractor
    • Fiber Scheduler
  • 类型(静态分析)
    • RBS
    • TypeProf

RBS

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
end
end

Ractor(实验阶段)

Ractor 是类似于并发抽象的 Actor 模型,旨在提供并行执行功能而无需担心线程安全。为了限制共享对象,Ractor 对 Ruby 的语法引入了一些限制,以下程序用两个 ractor 并行计算 prime?,速度大约快 2 倍。

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

Scheduler(实验阶段)

引入Thread#scheduler用于拦截阻塞操作,允许轻量级的并发,而无需更改现有代码。

当前支持的类/方法:

  • Mutex#lockMutex#unlockMutex#sleep

  • ConditionVariable#wait

  • Queue#popSizedQueue#push

  • Thread#join

  • Kernel#sleep

  • IO#waitIO#readIO#write 与相关方法如 #wait_readable#gets#puts 

  • 不支持 IO#select 

Ruby 3 还重新设计了单行匹配模式:

添加了 =>:

0 => a
p a #=> 0

{b: 0, c: 1} => {b:}
p b #=> 0

in 用于返回 true/false:

# version 3.0
0 in 1 #=> false

# version 2.7
0 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

    SIZE: 19539509
    SHA1: 233873708c1ce9fdc295e0ef1c25e64f9b98b062
    SHA256: a13ed141a1c18eb967aac1e33f4d6ad5f21be1ac543c344e0d6feeee54af8e28
    SHA512: e62f4f63dc12cff424e8a09adc06477e1fa1ee2a9b2b6e28ca22fd52a211e8b8891c0045d47935014a83f2df2d6fc7c8a4fd87f01e63c585afc5ef753e1dd1c1
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.xz

    SIZE: 14374176
    SHA1: c142899d70a1326c5a71311b17168f98c15e5d89
    SHA256: 68bfaeef027b6ccd0032504a68ae69721a70e97d921ff328c0c8836c798f6cb1
    SHA512: 2a23c2894e62e24bb20cec6b2a016b66d7df05083668726b6f70af8338211cfec417aa3624290d1f5ccd130f65ee7b52b5db7d428abc4a9460459c9a5dd1a450
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.zip

    SIZE: 23862057
    SHA1: 2a9629102d71c7fe7f31a8c91f64e570a40d093c
    SHA256: a5e4fa7dc5434a7259e9a29527eeea2c99eeb5e82708f66bb07731233bc860f4
    SHA512: e5bf742309d79f05ec1bd1861106f4b103e4819ca2b92a826423ff451465b49573a917cb893d43a98852435966323e2820a4b9f9377f36cf771b8c658f80fa5b


如何在圣诞节送给自己一个“陪聊女友”?

2020-12-25

Parallels与微软合作将Win10引入M1 MAC,实测运行效果糟糕

2020-12-25

Tokio 1.0发布,Rust异步编程框架

2020-12-25




觉得不错,请点个在看

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存