APP下载

经5年开发,效能是前主要版本3倍的Ruby 3正式登场

消息来源:baojiabao.com 作者: 发布时间:2026-05-25

报价宝综合消息经5年开发,效能是前主要版本3倍的Ruby 3正式登场

从2015年就开始着手开发的Ruby 3,总算赶在2020年末,当作圣诞礼物送给所有开发者。Ruby 3的更新重点放在3个地方,效能、并行性和类型。

特别是效能,在Ruby 3有了大幅度的成长,Ruby的主要设计人松本行弘(Matz)在之前就为核心开发团队设立目标,希望Ruby 3的速度可以是Ruby 2的3倍,并将这个计划称为Ruby3x3,而现在Ruby 3达成了这个目标。

开发团队以Optcarrot基准测试来比较Ruby 2.0、Ruby 3.0以及Ruby 3.0 JIT的速度,Ruby 3.0 JIT在NES游戏模拟工作负载的单执行绪效能,是Ruby 2.0的3倍。核心团队对MJIT(Method-based JIT)进行了诸多更新,使得在Ruby 3.0,JIT可以提升游戏、人工智能或是呼叫少量方法的工作负载效能。

不过,MJIT会让Rails应用程序变慢的问题仍然没有解决。虽然Ruby 3.0已经大幅度减少JIT版本的程式码大小,但是仍然未对Rails等,需要大量呼叫方法的工作负载进行最佳化,JIT会加重这类工作负载指令快取(i-cache)丢失的情况。官方曾在2年前发布Ruby 2.6时,提到这个问题,但是经过了这段时间,仍未找到良好的解决办法,官方要开发者期待Ruby 3.1,他们会持续改进这个问题。

为了跟上多核心电脑发展的脚步,Ruby 3.0也开始提供并行(Concurrent)计算的能力,这个版本加入实验性功能Ractor,提供类似并行计算演员模型(Actor Model)的实作,并让开发者毋须担心执行绪安全的问题。演员模型把程式执行比喻为演员,演员是并行运算的基本单元,每个演员接受到一则讯息,就可以做出一些决策,甚至建立更多的演员,传送更多的讯息,并决定回应的讯息。

开发者可以在Ruby 3.0中,创建多个Ractor,并且平行执行这些Ractor,由于Ractor之间无法共享一般物件,只能透过交换讯息来沟通,因此得以让开发者创建出执行绪安全的平行程式。经过官方的测量,平行版本的Ruby程式,速度是顺序程式的3.87倍,但官方提到,Ractor尚未成熟,目前仍然被标记为实验性功能,将来可能还会更改。Ruby 3.0还加入了Fiber Scheduler,执行轻量级的平行运算,让应用程序不需要更改现有程式码,就能获得加速。

Ruby 3.0还加入RBS以及类型分析工具TypeProf,来提供静态分析功能。RBS是一种用来描述Ruby程式类型的语言,其目的是要来支援常见的Ruby程式模式,让开发者可以编写联合类型、方法重载和泛型等进阶类型。而TypeProf则是捆绑在Ruby套件中的类型分析工具,目前TypeProf用作类型推断,可读取无类别注释的Ruby程式码,并且分析方法定义,以及使用方式,以产生RBS格式的类型特征(Type Signature)雏形。目前TypeProf也还在实验阶段,仅支援部分Ruby语言,在侦测类型错误功能仍有限。

2020-12-28 09:51:00

相关文章