Ruby 3.0正式发布:告别性能问题

发表时间: 2020-12-26 11:31

经历了长久的等待,我们终于在圣诞期间迎来了 Ruby 3.0,正如开发者 Matz 在上次演讲中所说的那样。对于 Web 开发者来说,本次更新不仅提升了运行速度,还克服了早前的一些缺点。首先,异步线程将由 Fibers 进行控制,因为当前的服务器会在释放其它线程时阻塞 I/O 操作,比如 API 调用 / 数据库操作等。

(图 via Sloboda Studio)

其次是启用基于 Fibers over Threads的线程操作,是因为这么做能够减少上下文的切换开销。

然后是 Ruby Actor / Ractor:它与 JavaScript 中在后台运行的网络操作相似,但 Ractor 还支持并行执行。由于法共享普通对象,Ractor 的线程并行安全性也更优,且支持基于消息传递的通讯方案。

内存性能方面,通过使用垃圾压缩器(GP),大多数对象将被传输到堆(heap)并自动压缩。

得益于 RBS,Ruby 3.0 还支持类型检查。作为一款类型签名语言,RBS 可用于描述类的类型和定义、方法、实体变量、继承 / 混合关系、以及 Ruby 模块。

其旨在查看 Ruby 程序中的常见模式,且允许联合、方法重载、以及泛型之列的高级类,让进程处理以 .rbs 格式编写的签名文件成为了可能。

(传送门:Ruby-lang.org)

此外还有即时编译器方面的改进,因为 JIT 的编译速度提升了 50~500%(取决于具体的工作量)、支持编码块参数、权利转让(Right Assignmenet),以及包括 RubyGems 3.2.0.rc.1、Bundler 2.2.0.rc.1、IRB 1.2.6、Reline 0.1.5 在内的某些标准库更新。

最后是向后兼容性,Ruby 3.0 让在不同版本间进行切换不再是个问题,且日志中的警告信息有助于快速修复 bug 。