写点什么

MacRuby 0.5 将引入基于 LLVM 的 VM,性能提升明显

  • 2009-03-31
  • 本文字数:886 字

    阅读完需:约 3 分钟

MacRuby 0.4 的发布引入了一个全新的图形库,并进行了一些改进,比如线程化 GC。在此之后,下个版本的 MacRuby 的重点将会是性能方面的改进。

有篇博文解释了在一个试验性的 MacRuby 分支上,全新的 VM 采用了 LLVM,从而替换掉了 YARV

全新的 VM 直接将解析器中的抽象源代码树(AST)转换成 LLVM 的中间表示(IR),再将其编译为优化过的机器码。还有大量 的关键性优化业已完成,例如更快的 fixnum 数学运算、缓存的方法分派、零成本的 IA64 异常、更快的实例变量访问、常量缓存、更快的 break/next、更轻量级的本地变量和尾部调用优化等等。

新 VM Roxor 的源代码已经在一个试验性的 SVN 分支之上。compile_node 方法通常会取得 Ruby AST 并转换成 LLVM 指令,这些指令可能是原语,也可能是 Ruby 运行时的调用。

因为 MacRuby 是基于 Ruby 1.9.1 的,引入试验性 VM 或者对 Objective-C 类型的使用等修改可能会导致兼容性问题。为了确保兼容性,MacRuby 集成了 RubySpec(博文中有所提及):

当前的试验性分支已经可能可以通过大部分的语言规格,而这是我们回归测试套件的一个标准部分。我们也一直在更新规格,以便可以跟上 Ruby 1.9 的步伐。

RubySpec 是一个可执行的规格,用于定义 Ruby 实现的行为,最早由 Rubinius 项目所发起。

Antonio Cangiano针对 MacRuby 的试验性版本对一些语言特性进行了评测,与 MRI 和标准 1.9.1 相比,取得了很不错的成绩。在将来的版本中,究竟其性能还能提升多少,目前尚不可知。Antonio 还指出了 MacRuby 的一些优势:

较之 Objective-C 和 Ruby 的混合(例如 RubyCocoa 的桥接),开发者可以使用 MacRuby 来与 Mac OS X 的核心技术相集成,并将其作为 Objective-C 的替换语言。确切地说,Objective-C 的运行时和世代垃圾回收器是 MacRuby 的核心。 但是从 API 的角度来看,开发者可以使用 Ruby 来编写代码,而不是使用更加繁琐和低级的 Objective-C。

考虑到 GUI 程序库长长的列表和 Ruby 的抽象能力,面向 OS X 的开发者可以简洁地使用 MacRuby 来构建应用,并紧密地与 Cocoa 程序库相集成,来代替 Objective-C。

查看英文原文: MacRuby 0.5 Will Have Faster VM Based on LLVM

2009-03-31 01:161743
用户头像

发布了 80 篇内容, 共 22.4 次阅读, 收获喜欢 5 次。

关注

评论

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

【牛客刷题-算法】NC9 二叉树中和为某一值的路径(一)

清风莫追

算法 二叉树 10月月更

webpack配置完全指南

Geek_02d948

webpack

Node.js实现大文件断点续传

coder2028

node.js

Redis开篇--非关系型数据库

Java学术趴

10月月更

js进阶手写常见函数

hellocoder2029

Vue

什么是虚拟服务器?一共有多少种虚拟服务器?这篇文章带你扫盲!

wljslmz

10月月更 虚拟服务器

你要的react+ts最佳实践指南

xiaofeng

React

Redis中的数据类型以及常用方法

Java学术趴

10月月更

webpack配置优化,让你的构建速度飞起

Geek_02d948

webpack

深入理解Node.js的进程与子进程

coder2028

node.js

js函数式编程讲解

hellocoder2029

JavaScript

带你实现react源码的核心功能

goClient1992

React

React组件复用的发展史

夏天的味道123

React

读懂React原理之调和与Fiber

xiaofeng

React

Vue实战必会的几个技巧

yyds2026

Vue

环形链表 II

掘金安东尼

算法 10月月更

Vue3入门指北(七)事件处理

Augus

Vue3 10月月更

Python应用之阿姆斯特朗数

芯动大师

Python语法 10月月更 阿姆斯特朗数

React-Hooks源码深度解读

goClient1992

React

Spring Lombok 实体类死循环问题

HoneyMoose

React生命周期深度完全解读

夏天的味道123

React

架构师的十八般武艺:业务架构

agnostic

业务架构

Redis--SpringBoot整合Redis(包含工具类)

Java学术趴

10月月更

细说react源码中的合成事件

flyzz177

React

【牛客刷题-算法】NC11 将升序数组转化为平衡二叉搜索树

清风莫追

数据结构 算法 二叉树 10月月更

一个dubbo和springboot的兼容性问题

xiaoxi666

【牛客刷题-算法】NC7 买卖股票的最好时机(一)

清风莫追

算法 动态规划 10月月更

变量使用范围

理想何止三旬

变量

JWT 和 JJWT 还傻傻的分不清吗

HoneyMoose

React源码解读之任务调度

flyzz177

React

Vue响应式依赖收集原理分析-vue高级必备

yyds2026

Vue

MacRuby 0.5将引入基于LLVM的VM,性能提升明显_Ruby_Werner Schuster_InfoQ精选文章