longzhiwen 2020-09-06
Ruby 编程语言的创建者和首席设计师 Yukihiro Matsumoto(松本行弘)近期在某演讲中分享了 Ruby 3 的一些情况。
原本 Ruby 3 计划在东京奥运会前夜发布,但奥运会被推迟到 2021 年,所以一些核心开发者想知道 Ruby 3 是否也会顺理成章地推迟一年发布。讨论后最终还是决定今年发布,并且现在定于 12 月 25 日。
“我们决定今年发布 Ruby 3,因为作为开源社区,我们必须前进。我们必须继续前进,开源社区通常不能停止发展,否则就是等死……”松本表示,过去四五年一直在谈论 Ruby 3 的未来,但是一直也没见发布,不过今年是真的会在 12 月 25 日圣诞节推出 Ruby 3。在圣诞节发布 Ruby 升级是社区的一项传统。
接着松本分享了所有编程语言面临的困境:升级与不升级的矛盾。在应用运行稳定的基础上,如果大改语言,那么就会带来艰难升级的危险,Python、PHP 与 ECMAScript 都是很好的例子,它们的社区花了许多年才能接受这些变化。“使用 Python 3,社区花了十多年的时间;PHP 6 甚至被取消了,直接从 PHP 5 开始创建 PHP7;EMCAScript 4 也被取消了。”
松本解释说,如果不做出改变,人们可能会离开社区,而如果升级到更高版本则会带来太多痛苦,他们也可能会离开社区。这种进退两难的情况可能是每个编程语言面临的困境,不过松本觉得这种时候更应该向前:“因此,正如我所说,设计一种语言很困难,但是无论如何我们都必须向前迈进,以创造未来。”
同时,在这种情况下,保持兼容性是很重要的。松本为 Ruby 3 明确了三个具体的目标:快速、并发与准确。“使 Ruby 更快,并使 Ruby 程序员更高效”。
为了使 Ruby 更快,开发团队将从改进其即时编译器(JIT)开始;为了实现并发,将避免使用其它语言的解决方案,诸如 ECSMAScript 7 添加了带有关键字 async 和 await 的控制机制。Ruby 3 会改为实现其期待已久的异步 i/o fiber,作为控制异步线程的更好的方法。fiber 之间的上下文切换速度很快,因此性能会更高。
让 Ruby 更加准确的方法是优化早期检查错误,主要靠类型分析器实现,它将生成 Ruby 签名,Ruby 3 将为其核心库提供类型签名,可用于类型检查以及增强将来的 IDE。
松本还介绍了 Ruby 3 将带来的三个新语法特性。第一个是便捷的模式匹配语法:
第二个新特性允许将值分配给等号右侧的变量,“这在某些情况下非常方便。”
第三个新特性是为块参数编号:
不过松本也解释,Ruby 3 语法上不会有太大变化,稳定性很重要,他们将专注于改进 Ruby 的现有支持工具,例如用于语言服务器协议的 Solargraph、用于静态类型检查的 Sorbet,以及 Rubocop 的代码 linter。