Ruby 3.0.0 RC1发布

2020-12-21 22:05:03

类型检查器(包括TypeProf和其他支持RBS的工具)将通过RBS定义更好地理解Ruby程序。

您可以写下类和模块的定义:类中定义的方法,实例变量及其类型以及继承/混合关系。

RBS的目标是支持Ruby程序中常见的模式,它允许编写高级类型,包括联合类型,方法重载和泛型。它还支持带有接口类型的鸭子输入。

Ruby 3.0附带了rbs gem,它允许解析和处理用RBS编写的类型定义。以下是带有类,模块和常量定义的RBS的一个小示例。

模块ChatApp版本:字符串类通道attr_reader名称:字符串attr_reader消息:Array [Message] attr_reader用户:Array [User | Bot]#`|`表示联合类型,`User`或`Bot`。 def initialize:(String)-> void def post :(字符串,来自:用户| Bot)->消息#支持方法重载。 | (文件,来自:用户| Bot)->消息结束

它读取普通的(无类型注释的)Ruby代码,分析定义了哪些方法以及如何使用它们,并生成RBS格式的类型签名的原型。

#test.rb类用户def初始化(name:,age :) @name,@age = name,年龄终止attr_reader:name,:age最终用户。新建(姓名:" John"年龄:20)

$ typeprof test.rb#类class用户attr_reader名称:字符串attr_reader年龄:整数def初始化:(名称:字符串,年龄:整数)-> [String,Integer]结束

您可以通过将输入另存为“ test.rb”并调用名为“ typeprof test.rb”的命令来运行TypeProf。

您也可以在线尝试TypeProf。 (它在服务器端运行TypeProf,因此很抱歉!)

TypeProf尚处于实验阶段,尚未成熟。仅支持一部分Ruby语言,并且类型错误的检测受到限制。但是,改善语言功能,分析性能和可用性的范围仍在迅速增长。任何反馈都非常欢迎。

Ractor是类似于并发抽象的Actor模型,旨在提供并行执行功能而无需担心线程安全。

您可以制造多个拖拉机,也可以并行运行它们。 Ractor使您可以制作线程安全的并行程序,因为ractors无法共享普通对象。消息传递可支持各练习器之间的通信。

为了限制对象共享,Ractor对Ruby的语法引入了一些限制(没有多个Ractor,没有限制)。

规格和实现尚不成熟,将来可能会更改,因此此功能被标记为实验性功能,并在首次Ractor.new时显示“实验性功能”警告。

下面的小程序计算n.prime? (n是一个相对较大的整数)与两个拖拉机平行。您将确认与并行计算机上的顺序程序相比,该程序的执行速度快约x2倍。

要求“素数” #n.prime?在r1中发送整数的情况下,r2并行运行r1,r2 = *(1 .. 2)。贴图做Ractor。新做n = Ractor。收录主要?结束结束#发送参数r1。发送2 ** 61-1 r2。发送2 ** 61 + 15#等待expr1,expr2 p r1的结果。取#=>真p r2。取#=>真正

引入了Fiber#scheduler来拦截阻塞操作。这允许轻量级的并发,而无需更改现有代码。观看“别等我,Ruby 3的可扩展并发性”,以了解它的工作原理。

需要' async'需要' net / http'需要' uri'异步执行[" ruby​​" ," python" ," c" ]。每个做|话题异步网络:: HTTP。得到(URI" https://www.google.com/search?q =#{topic}")结束结束结束

重新设计了单行模式匹配。 (实验性)0 => a p a#=> 0 {b:0,c:1} => {b:} p b#=> 0

#版本3.0 0 in 1#=> false#版本2.7 0合1#=>引发NoMatchingPatternError

查找模式已添加。 (实验)案例[" a" ,1," b" ," c" ,2," d" ," e" ," f" ,3] in [* pre,String => x,字符串=> y,* post] p pre#=> [" a",1] p x#=> " b" p y#=> " c" p帖子#=> [2," d&#34 ;," e&#34 ;," f&#34 ;, 3]结尾

Hash#except现在是内置的。 h = {a:1,b:2,c:3} p h。除了(:a)#=> {:b => 2,:c => 3}

添加了内存视图作为实验功能。这是一个新的C-API集,用于在扩展库之间交换原始内存区域,例如数字数组和位图图像。扩展库还可以共享由形状,元素格式等组成的存储区域的元数据。使用这些类型的元数据,扩展库甚至可以适当地共享多维数组。此功能是通过参考Python的缓冲区协议来设计的。

将长代码粘贴到IRB的速度比Ruby 2.7.0捆绑的速度快53倍。例如,粘贴此示例代码所需的时间从11.7秒变为0.22秒。

关键字参数与其他参数分开。原则上,在Ruby 2.7上显示警告的代码将不起作用。详细信息请参见文档。

在Ruby 2.5中,回溯的顺序已被颠倒,并且被恢复。现在,它的行为类似于Ruby 2.4;首先打印错误消息和发生异常的行号,然后再打印其调用方。

以下库不再是捆绑的gem。请安装相应的gem以使用这些功能。

Ruby最初由Matz(Yukihiro Matsumoto)于1993年开发,现在已作为开源开发。 它运行在多个平台上,并在全世界范围内广泛用于Web开发。