QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Rubinius 1.0 兼容 MRI 1.8 且速度与之相当

  • 2009-12-08
  • 本文字数:1225 字

    阅读完需:约 4 分钟

Rubinius,“Ruby 程序员的 Ruby”终于要发布 1.0 版本了。 1.0 版本关注于运行真实应用程序所需的兼容性,性能方面要与 MRI 1.8 不相上下,同时也注重代码质量。

Rubinius 的主要开发者 Evan Phoenix 向 InfoQ 透露了为何该版本如此重要以及它所包含的内容。

1.0 才是我们从 Rubinius 开始之时就一直在做的版本。我们希望能兼容 1.8 并且在性能上与之相近。因为强制遵循 RubySpec,我们目前的兼容性已经很高了。 在速度方面,Rubinius 在很多东西上的速度都已经数倍于 1.8 了。我们力争让所有实现核心类的 Ruby 代码运行起来和 1.8 实现中的 C 代码一样快。在这块我们做的很好,但核心类在某些情况下很有可能会比 1.8 慢。

我们得到了一些来自外部的报告,一些真实的代码在 Rubinius 下要更快些。显然这些结论无法说明 1.0 的所有代码都是如此,但至少能证明我们正在接近这一目标。

Rubinius 能够使用 LLVM(Low Level Virtual Machine)编译器来构建本地代码。请注意,这个特性在 RC1 中默认是关闭的。

LLVM 很棒。在 1.0-rc1 中,你需要在配置时传入–enable-llvm 来构建带有 LLVM 的 Rubinius。在 rc2 时,我们可能会有所改变,默认加入 LLVM,同时如果用户觉得不需要 LLVM,也能选择去除它。 如果在编译时加入 LLVM,会默认开启 JIT,自动将多次运行的方法编译成机器码。我们从 LLVM 中得到了很好的输出,尤其是在使用我们的性能剖析器的时候。它告诉我们哪些方法比较常用,并将之内联进来以提高性能。

Rubinius 早期的关注点集中在完整性方面,这为我们带来了 RubySpec 。现在的焦点是切换到了性能上,还是依旧在完整性上呢?

两者我们都会关注。过去主要是关注完整性,过去的一年里,我们在性能上也投入了不少精力。LLVM 就是一个很直接的产出,而且它带来的回报很高。 Rubinius 的性能越来越好了。在微型基准测试中,我们的结果数倍于 1.8(有的甚至高达几百倍)。但我们知道微型基准测试的结果不能用于真实世界的代码中。为此,我们会查看来自世界各地的结果,有些用户反馈说速度有数倍提升,有的反馈速度差不多,也有报告速度很慢的。

我们目前比较关注那些性能较差的地方。我们做了不少工具帮助隔离并修复性能问题,比方说性能剖析工具。

为了改善性能,我们先着手改善 Ruby 代码本身。这方面还有很长的路要走,优化算法、修正低效代码。

JIT 的改进是另一个改善性能的主要工具。告诉 JIT 如何更有效地将 Ruby 代码编译为机器码是很有收获的事,我们一直在做这方面的工作。

除了性能与兼容性方面的提升,Rubinius 在别的方面也有改进,例如遗漏 end 的错误报告

下面这个问题可能是最有意思的:Rubinius 1.0 能运行 Rails 吗?

当然!在 rc2 里我们应该可以运行 Rails 2.3.5 和 Rails 3。 12 月底会放出 1.0-rc2,人们正好有时间在假期里玩玩。

可以从 Rubinius 的网站上下载到 1.0 的第一个候选版本。现在就来测试一下你 1.8.6 的代码并报告你发现的问题吧。

查看英文原文: Rubinius 1.0 Brings MRI 1.8 Compatibility and Near Speed Parity

2009-12-08 09:451390
用户头像

发布了 135 篇内容, 共 61.1 次阅读, 收获喜欢 43 次。

关注

评论

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

Qt解压带有密码的加密文件

中国好公民st

c++ Qt Company 10月月更

微服务稳定性保障

穿过生命散发芬芳

微服务 10月月更

Spring Boot 集成 Redis 配置 MyBatis 二级缓存

微枫Micromaple

redis 缓存 mybatis springboot 10月月更

【LeetCode】重新格式化电话号码Java题解

Albert

LeetCode 10月月更

When allowCredentials is true, allowedOrigins cannot contain the special value ___ since that cannot be set on the _Access-Contr

共饮一杯无

Java springboot 10月月更

操作系统导论:分页

小白钊钊

操作系统 java; 10月月更

从特斯拉人形机器人亮相看AI人工智能模型落地面临的两个难题

felix

落地 机器人 AI人工智能

Go学习之路-1.认识GO语言

子不语Any

Go 后端 10月月更

2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数 因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。 字符串的 子序列 是经由原字符串删除一些(也可能不删除

福大大架构师每日一题

算法 rust 福大大

【一Go到底】第一天---初识Goooooooooooooooooooooooo

指剑

Go go并发 10月月更

架构师的十八般武艺:线上运维

agnostic

运维

COSCon'22主论坛来袭 开源站在十字路口

开源社

【结构体内功修炼】结构体内存对齐(一)

Albert Edison

C语言 结构体 10月月更 内存对齐

大画 Spark :: 网络 (8)-Spark 网络中的“四次握手”Driver 如何获取 Executor 的 EndpointRef 烧脑

dclar

大数据 hadoop spark 源代码 spark源码

mysql中的事务隔离级别序列化如何实现

知识浅谈

MySQL 隔离级别 10月月更

今日国庆,祝福祖国!【文末超级福利】

图灵教育

读书 国庆节

【CSS】:什么是z-index属性?该属性有哪些取值类型?

翼同学

CSS 前端 样式设置 10月月更

OpenHarmony如何控制屏幕亮度

坚果

OpenHarmony 10月月更

【从0到1学算法】1. 如何获取题中关键信息

Geek_65222d

10月月更

[架构实战] 学习笔记二

爱学习的麦子

ESP32-C3 学习测试 蓝牙 篇(四、GATT Server 示例解析)

矜辰所致

蓝牙 ESP32-C3 10月月更 GATT

能不能手写Vue响应式?前端面试进阶

bb_xiaxia1998

Vue

Java中的自旋锁和适应性自旋锁是什么意思?其分类依据是啥?

wljslmz

Java 自旋锁 10月月更 适应性自旋锁

【愚公系列】2022年10月 Go教学课程 015-运算符之赋值运算符和关系运算符

愚公搬代码

10月月更

今日国庆,祝福祖国!【文末超级福利】

图灵社区

读书 国庆节

Python应用之计算三角形面积

芯动大师

10月月更 Python代码 计算三角形面积

体验 Orbeon form PE 版本提供的 JavaScript Embedding API

汪子熙

Java SAP commerce 10月月更 oberon

一起玩OptaPlanner-Study,玩转第一个程序

积木思维

《零代码教练指南》正式发布

明道云

存储优化--分区与冷热分离

喵叔

10月月更

跟随一组图片,了解Go Channel的底层实现

董哥的黑板报

Go 后端 服务端 操作系统 runtime

Rubinius 1.0兼容MRI 1.8且速度与之相当_Ruby_Mirko Stocker_InfoQ精选文章