写点什么

Rubinius 近期概况

  • 2007-09-30
  • 本文字数:2197 字

    阅读完需:约 7 分钟

Rubinius 是一个主要用 Ruby 语言实现的 Ruby 虚拟机,它的底层实现包括少量 C,不过这部分也会在将来用 Ruby 来重写。(更多的细节参见 InfoQ 的采访 Evan Phoenix 谈 Rubinius )。

在过去的一年当中,Rubinius 受到了广泛的关注并且聚集了一批为缩短未完成功能和不兼容列表而不懈奋斗的忠实开发者。JRuby 团队的 Ola Bini,在一片名为“ Rubinius 很重要”的文章当中表达了他对 Rubinius 的观点:

实际上,我已经越来越确信对于那些不需要庞大的 Java 基础设施的人来说,Ruby 世界中 Rubinius 是最为重要的一个项目。更为重要的是,Rubinius 在 MRI(Matz’s Ruby Interpreter,标准的 Ruby 实现)方面做的非常正确。如果按照现在对 Ruby1.9.1 的时间安排和计划没有大的改变,那么我预测 Rubinius 将会在未来的 6 个月时间内,成为 CRuby 实现的不二选择。

他列举了若干论据来支持自己的观点:

  • 它是基于字节码的,这意味着它能够很好的解决性能问题。
  • 它是可插拔的,架构非常的干净,这意味着诸如垃圾回收和对象内存等问题,能够转换使用另一种算法。
  • 它被设计成线程安全的(尽管还没有达到真正的线程安全),并能支持多个虚拟机。
  • 它可以与现有的 MRI 扩展一起工作。
  • 大部分的代码用 Ruby 编写。
  • 它能够给你直接从 Ruby 代码,访问所有内部结构的能力(比如 MethodContexts/BlockContexts 等)。
  • 这个项目使用 Valgrind(一套调试、分析 Linux 程序的工具)来保证编写的 C 代码万无一失。

另一个有进步的方面就是性能。Evan Phoenix 最近发布了一些关于 Rubinius 和 Ruby 1.8.x(MRI)比较的测试结果,结果显示 Rubinius 在很多测试中处于领先的地位。以下是 Evan Phoenix 的分析:

我想指出这些数据当中的几个趋势。

  • 对于没有产生错误和超时的测试,Rubinius 在31个中有 24 个更快,这很令人惊喜,因为这个结果比之前一次测试的结果有了巨大的提高。
  • bm_so 部分表现的最慢,Rubinius 仅在11个测试中有2个更快一些,4 个出现错误或者超时。如果你看一下那些测试程序,你会发现它们都是一些针对核心方法的基本测试,主要包括像String#<<。因此在这个阶段是有意义的,我们在那些方面是要慢上一些。我们还尚未在那些方面上进行过调优呢。
  • 另一个大趋势就是那些仅仅给 VM 架构加压的测试结果显示 Rubinius 要快很多。其中两个例子就是 bm_vm1_swap 和 bm_vm1_simplereturn,第一个交换两个本地变量,执行a, b = b, a几百万次。这个例子很好地展示,字节码虚拟机要远远快于 MRI 中遍历树结构实现方式。下一个,bm_vm1_simplereturn 显示了 Rubinius 快速创建一个方法的上下文(method context)并且快速返回给调用者的能力。我对于这一点激动不已,因为即使 Rubinius 的MethodContext是语言中的一等公民,它仍旧有三倍于 MRI 的速度优势,同时不失强大的编程能力。

有一点很重要需要指出:Rubinius 使用的是字节码解释。众多优化手段,比如即时编译(JIT),将字节码在运行时转换成原生码,或者其他方法将会在以后出现,所以更多的性能提升仍然值得期待。另一些优化的技术,比如高级或者可配置垃圾回收策略甚至能更高的提升性能。

Rubinius 受到各种形式的支持: Evan Phoenix 受雇于 EngineYard ,用他一半的时间来开发 Rubinius;最近 Sun 为 Rubinius 开发者 Wilson Bilkovich Brian Ford 资助了旅费,并且将 JRuby 的成员 Charles Nutter 送到了 Rubinius Sprint 。通过看到一系列的改进列表,就不难推断出这是一个颇有成效的会议:

  • Evan 将 Syck(YAML 解析器)融入了进来,使用了我们非常酷的反向(Ruby C API 兼容)组件。
  • Wilson 在几个小时内鼓捣出一堆StringIO的测试规格。
  • Evan 迅速地写了一个能够通过测试规格的 Ruby StringIO
  • Charles 抹去了几个在接下来编译过程中引起不小问题的 def 和 case 规格。
  • Wilson 添加了那些彩色的回溯跟踪(backtrace),它能够让你快速地找到最终出错的那行代码,同时还有其它一些重要的回溯跟踪的功能。
  • Wilson 实现了剩下的在编译器中缺少的 case 支持。
  • Charles 添加了一些 ObjectSpace 的基本支持。
  • 我提交了一个对于我们 Ruby 核心库测试规格的完整重组和许多改进。我们已经有 2800 多个测试规格,其中三分之二已经通过了测试。我们还有将近 50% 的核心库测试规格要完成。
  • Evan 修改了对于线程的支持,并且添加了一些优先级别。
  • 我添加了(在 Evan 的大力帮助下,同时查看 x86 机器代码的一些重要 gdb sessions)一些很酷的东西到我们的“对外功能接口”(Foreign Function Interface, FFI),以支持读写 C 整数和 Ruby 浮点型。(浮点支持仍旧需要 Evan 金手指的一两下点拨)。有了这些,我就能完成我们的Math方法支持,和其他的Math测试规格。
  • Wilson 推敲出一堆支持编译eval时需要的方法。 如果你没有意识到这有多么的恐怖(痛苦),别怪我。
  • 我开始了一个为准备Dir.glob而写的File.fnmatch的实现(否则我才不会跟亲爱的 glob 我那么熟络呢),同时清理了我们的fnmatch测试规格。

正如在最近一篇关于Gemstone 对JRuby 和Rubinius 的支持的采访中提到的,Rubinius 看起来也在Germstone 的面向对象数据库(Gemstone’s Object Oriented Database,OODB)的Ruby 计划中扮演着重要的角色。

查看英文原文: Rubinius roundup - - - - - -

译者简介:木雨宝道,Ruby On Rails 开发者,关注各种 Web 开发技术,敏捷开发爱好者,很少饮酒。参与 InfoQ 中文站内容建设,请邮件至 china-editorial[at]infoq.com

2007-09-30 23:581330

评论

发布
暂无评论
发现更多内容

详解目标检测模型的评价指标及代码实现

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

IPQ6010/QCA8081/QCN5052/QCN5022 MAXON MX-A6022-ME WiFi6 Industrial Wireless Access Point

MAXON

IPQ6010 QCN5052 QCN5022 QCA8081

镜舟数据库与 DataBuilder 完成兼容性认证,助力企业开展“极速统一”数据分析

镜舟科技

数据库

镜舟:打造行业顶级国产OLAP数据库

镜舟科技

面试官:try-catch放在循环体内还是循环体外,哪种效率更高?

腾讯大神耗时三年,立足实际开发的巅峰之作,详解高并发程序设计

Java 程序设计 高并发

NFTScan 与 DeBox 达成合作,双方在 NFT 社交数据层面展开合作

NFT Research

NFT

浅谈活动场景下的图算法在反作弊应用

百度Geek说

人工智能 算法 图神经网络 图像融合 企业号 3 月 PK 榜

阿里云PAI-DeepRec CTR 模型性能优化天池大赛——获奖队伍技术分享

阿里云大数据AI技术

人工智能 深度学习 性能优化 模型 企业号 3 月 PK 榜

测试人社区技术沙龙——计算机视觉在App兼容性测试中的实践

测试人

软件测试 测试开发 测试开发自动化测试

pytest学习和使用3-对比unittest和pytest脚本在pycharm中运行的方式

Python 自动化测试 pytest

不可错过!Arm 、Intel 及阿里云等资深技术专家现场解读系统安全

OpenAnolis小助手

系统安全 Meetup 龙蜥社区 sig 机密计算

量化现货合约跟单app系统开发源代码(可二开)

开发v-hkkf5566

2022 OpenHarmony年度运营报告

OpenHarmony开发者

OpenHarmony

pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)

Python 自动化测试 unittest 测试框架 pytest

跟着字节AB工具DataTester,5步开启一个实验

字节跳动数据平台

大数据 云服务 AB testing实战 ab测试 企业号 3 月 PK 榜

使用图解的方式来解决链表的算法问题

龙蜥自动化平台 SysOM 2.1 热补丁中心介绍 | 第 74 期

OpenAnolis小助手

直播 系统运维 龙蜥大讲堂 SysOM 补丁

CTO问我:MySQL从节点上的服务崩了,还怎么「主从读写分离」?

Java你猿哥

Java MySQL 后端 ssm Java工程师

镜舟科技荣获IT168年度技术卓越奖!

镜舟科技

数据库

好家伙!阿里最新SpringBoot进阶笔记涵盖了SpringBoot所有骚操作

Java你猿哥

Java Spring Boot 面经 SSM框架

MySQL MVCC实现原理

得物技术

MySQL MVCC java

镜舟数据库荣获 CSDN 年度创新产品与解决方案!

镜舟科技

数据库

GaussDB(DWS)运维:导致SQL执行不下推的改写方案

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

【分享】为什么我设计的PCB很少出错?

华秋PCB

工具 测试 电路 PCB PCB设计

软件工程高效学 | 软件的内涵与危机

TiAmo

软件工程 软件开发

打造炫酷时尚的 Neumorphism 设计!

编程的平行世界

flutter 前端 设计 flutter for web

测试人软件测试技术沙龙——深入探讨一站式效能平台的演进历程

测试人

软件测试 自动化测试 测试开发

吃透阿里2023版Java性能优化小册后,我让公司系统性能提升了200%

Java你猿哥

ssm Java工程师 Java性能优化 java

Git客户端工具:SourceTree中文激活版

真大的脸盆

git Mac Mac 软件 Git客户端

Rubinius近期概况_Ruby_Werner Schuster_InfoQ精选文章