AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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:581106

评论

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

Python进阶(五十三)Flask Web开发实现将表单渲染成HTML

No Silver Bullet

Python flask web开发 11月月更

Java | IO流缓冲流和转换流

陌上

Java 编程 11月月更

拿下大厂?这几道jvm面试题必须要懂

钟奕礼

Java 程序员 java面试 java编程

【C语言】int 关键字

謓泽

11月月更

从基础到实战,阿里巴巴高并发系统设计全彩版手册限时开源

Java全栈架构师

程序员 面试 程序员人生 高并发 架构师

网络核心笔记(二)

lxmoe

学习笔记 网络 11月月更

三面头条 + 四面阿里 + 五面腾讯拿 offer 分享面经总结

程序知音

java面试 大厂面试 java架构 后端技术 Java面试八股文

Java | IO流文件专属流

陌上

Java 编程 11月月更

一文搞懂MySQL表字段类型长度的含义

闫同学

MySQL 数据库 11月月更

仅hashmap一道面试题我就搞定了面试官成功入职面试官:我裂开了

钟奕礼

Java java面试 java编程 程序员、

10道不得不会的 SpringBoot 面试题

JavaPub

Java 后端 springboot

面试中如何才能拿到阿里 P7 的职级?

Java永远的神

Java 阿里巴巴 程序员 架构师 程序员晋升

这个bug,你中招了吗!!!

石臻臻的杂货铺

kafka 后端 11月月更

2022全网最全最新Java面试题-独家内部教材

钟奕礼

Java 程序员 java面试 java编程

美团技术官手写的精品SpringBoot笔记,涵盖99%知识点,强到离谱

小小怪下士

Java spring 程序员 springboot

【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」

码界西柚

log4j logback 全链路追踪 11月日更 MDC

Python冷知识:如何找出新版本增加或删除了哪些标准库?

Python猫

Python

集合工具类Collections指南,以及Comparable和Comparator排序详解

共饮一杯无

Java 集合 11月月更

2022成功入职阿里:阿里的三套Java研发岗面试题总结(文末有答案)

钟奕礼

Java java面试 java编程 程序员、

计算机网络:VLAN基本概念与原理

timerring

计算机网络 VLAN 11月月更

3年Java研发,突击30天,从14K变成了30K

程序知音

Java java面试 大厂面试 java架构 后端技术

Java | IO流数据流和标准输出流

陌上

Java 编程 11月月更

2022一线大厂10w字面试总结,每日刷几道,明年金三银四稳了

程序员小毕

spring 程序员 JVM 架构师 java面试

Java 后端 100多道面试题,多看点题,没坏处!

钟奕礼

Java 程序员 java面试 java编程

【LeetCode】找到最高海拔Java题解

Albert

算法 LeetCode 11月月更

2022年最新版68道Redis面试题,20000字干货,赶紧收藏起来备用!

钟奕礼

Java 程序员 java程序员 java面试 java编程

10道不得不会的 Java容器 面试题

JavaPub

Java 面试 后端

亿级万物互联新时代的物联网消息中间件EMQX调研

宋小生

物联网 mqtt emqx

【LeetCode】无重复字符的最长子串题解

Albert

算法 LeetCode 11月月更

Java中的String类常用方法

共饮一杯无

Java string 11月月更

网络核心笔记(一)

lxmoe

学习笔记 网络 11月月更

Rubinius近期概况_Ruby_Werner Schuster_InfoQ精选文章