发布Ruby 3.0.0预览版1

2020-09-26 03:47:12

RBS是一种描述Ruby程序类型的语言,类型检查器(包括类型分析器和其他支持RBS的工具)将通过RBS定义更好地理解Ruby程序。

您可以写下类和模块的定义:类中定义的方法、实例变量及其类型以及继承/混合关系。RBS的目标是支持Ruby程序中常见的模式,并允许编写高级类型,包括联合类型、方法重载和泛型。它还支持具有接口类型的鸭子类型。

Ruby3.0附带了RBS gem,它允许解析和处理用RBS编写的类型定义。

模块ChatApp版本:String类Channel attr_reader名称:string attr_read message:array[message]attr_read Users:array[user|Bot]#`|`表示联合类型,`User`或`Bot`。Def initialize:(String)->;void def post:(string,from:user|Bot)->;message#方法重载。|(File,From:User|Bot)->;消息结束。

Ractor是一种类似于并发抽象的Actor模型,旨在提供没有线程安全问题的并行执行功能。

你可以制造多个赛车,你可以并行运行它们。Ractor能够创建线程安全的并行程序,因为Ractor不能共享普通对象。Ractor之间的通信由消息传递支持。

为了限制共享对象,ractor对Ruby的语法引入了几个限制(如果没有多个ractor,则没有任何更改)。

规范和实现在未来不会成熟和更改,因此该功能被标记为实验性的,如果创建了ractor,则会显示实验性的警告。

下面的小程序算素数吗?与两个RACKER并行,并且使用两个或更多核心比顺序编程快约X2倍。

需要#n.Prime吗?在R1中发送整数的情况下,R2并行运行R1,R2=*(1.。2)。地图做赛车。New do n=ractor(新做n=Ractor)。接收;接收。质数?End#发送参数R1。发送2**61-1 R2。发送2**61+15#等待expr1、expr2 p R1的结果。取#=>;true p r2。采用#=>;true。

引入线程#调度器来拦截阻塞操作。这允许在不更改现有代码的情况下实现轻量级并发。

当前并发性的入口点是Fiber.Schedule{...},但是到Ruby3发布时,这个入口点可能会发生变化。

目前,Async::Scheduler中有可用的测试调度器。有关更多详细信息,请参阅doc/Scheduler.md。[功能#16786]。

注意:此功能具有很强的实验性。在下一个预览版本中,名称和功能都将更改。

大小写[";a";,1,";b";,";c";,2,";d";,";e";,";f";,3]在[*pre,string=>;x,string=>;y,*post]p pre#=>;[";A";,1]p x#=>;";b";p y#=>;";c";p post#=>;[2,";d";,";e";,";f";,3]结束。

H={a:1,b:2,c:3}p h。除(:a)#=>;{:b=>;2,:c=>;3}

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

关键字参数与其他参数分开。原则上,在Ruby2.7上打印警告的代码不会工作。有关详细信息,请参阅文档。

在Ruby2.5中,回溯的顺序颠倒了,但被取消了。现在,它的行为类似于Ruby2.4;首先打印错误消息和发生异常的行号,然后打印它的调用者。

我们计划包括“类型分析器”,这是一个静态类型分析功能。敬请关注!

Ruby最早是由Matz(松本幸弘)在1993年开发的,现在以开源的形式开发。它运行在多个平台上,在世界各地都在使用,特别是在Web开发中。