文章: 欣欣向荣的Ruby家族

标签: 文章 向荣 ruby | 发表时间:2013-02-16 15:39 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

诞生于1993年的 Ruby即将迎来自己的20岁生日,估计松本行弘(Matz)先生20年前也没有想到Ruby能成为一门流行的语言,长期出现在 TIOBE编程语言排行榜前20之列,并且有 逐步上升之势。Ruby的爱好者遍布世界各地,在中国也有庞大的 RubyChina社区。而且,除了Matz的MRI Ruby之外,还诞生了很多与其兼容的Ruby实现,有的旨在提升性能,而有的则是为了充分利用其他平台提供的资源,还出现了专门针对移动设备和嵌入式设备的版本。

更好的性能

早期的Ruby虽然受到很多人的追捧,但是性能并不理想,很多人都质疑Ruby的性能,建议系统中的关键部分用C来写。而且Ruby的GC也存在很多问题,打不打 MBARI补丁,差异巨大。出于性能的考虑,很多人开始从动手实现性能更好的虚拟机,正是他们的努力,让Ruby的性能获得了质的飞跃。

首当其冲的是Koichi Sasada开发的 YARV(Yet Another Ruby VM),该项目的唯一目的就是要打造世界上最快的Ruby虚拟机。从早期的一些 评测来看,YARV为Ruby带来了巨大的性能提升,而它也成为了后来Ruby 1.9的官方解释器,自然不必多说了。

其次是 Rubinius,在它的首页最上方有着这么一句话:

An environment for the Ruby programming language providing performance, accessibility, and improved programmer productivity.

可见它的关注点是性能、可访问性以及开发者的生产效率。Rubinius拥有自己的字节码虚拟机,运行时,Ruby代码会先变为字节码,随后再通过LLVM将字节码编译为编译为高效的字节码。而且,它还有一套精确的、带压缩的分代垃圾收集器,进一步提升了GC效率。

除此之外,Rubinius还为我们带来了另一个重要的贡献,它创建了 RubySpec,为其他Ruby实现提供了一套可以参考的实现规范,后续很多组织也参与其中,添砖加瓦,贡献了很多测试。

第三个登场的是Phusion出品的 REE(Ruby Enterprise Edition),REE的焦点更多地集中在服务端的Rails应用上,与 Phusion Passenger结合在一起,可以极大程度上降低Rails应用的内存开销,并且提升服务响应速度。REE的主页上提供了一套 官方的对比,Apache (worker MPM) + Ruby Enterprise Edition + Phusion Passenger的组合在这两方面要明显优于其他组合。

REE还集成了很多第三方的补丁,比如之前提到的MBARI、 RailsBench等等,可惜它仅兼容到Ruby 1.8.7,有点跟不上时代的节奏。

在性能上表现出众的还有JRuby,考虑到它是运行于Java平台之上的,因此会在后续小结中进行重点介绍。

更多的平台

JRuby是运行于Java平台之上Ruby实现,最近刚刚发布了1.7.2版本,能很好地兼容Ruby 1.8.7和1.9.2(JRuby从1.7.0开始默认使用1.9模式,之前一直默认1.8模式)。JRuby让Ruby程序能够充分利用Java的庞大资源,同时还提供了更好的性能。如今的Ruby拥有庞大的类库,但在Rails刚刚让Ruby成为众人焦点之时,Ruby的资源并没有这么充分,即使是现在,能够借助Java的力量还是非常有优势的。

在JRuby诞生初期,开发者的主要精力集中在对MRI的兼容性上,但在兼容性不再是个问题时,他们就努力提升性能,他们做到了,还越做越好。例如,借助Java的力量,JRuby能真正做到多线程,而不是“Green Thread”;Java 7中新增的invokedynamic,能够为基于JVM的脚本语言带来不小的性能提升,JRuby 1.7就开始支持该特性了。JRuby的核心开发者 Charles Oliver Nutter经常会在博客上发表一些 文章,介绍JRuby的优化方法和经验,从最近的一篇 文章表明,JRuby 1.7.2在很多方面的性能要远好于尚未正式发布的Ruby 2.0。

有不少Ruby开发者之前都是Java开发者(Bruce A. Tate就写过一本很出名的 《From Java to Ruby》),因此如果能够充分利用之前Java的各种经验,也不失为一件好事。一个有着丰富Java经验的开发者,知道怎么对JVM进行调优,那他也一定能把JRuby的程序 调校得很好。

Android上运行的是Java程序,那么应该也能运行JRuby,于是就诞生了 Ruboto——这是一个用来开发原生Android应用的框架及工具链。此外,将Ruby代码编译为Java字节码后交付给用户,还能在一定程度上保护源代码,这也算是个额外的收获吧。

讲完了运行在Java平台上的Ruby,再来看看.NET平台上的Ruby—— IronRuby。与JRuby类似,IronRuby让Ruby能利用.NET Framework上的资源,.NET开发者也能够使用Ruby快速地完成很多任务。可惜IronRuby在2011年3月之后就再也没有更新过,因此这里就不再阐述了。

Mac OS自带了MRI Ruby,但其实也有构建于Mac OS X核心技术(例如Objective-C运行时)之上的Ruby 1.9实现,即 MacRuby。它的目标是在不牺牲性能的前提下享受Ruby的乐趣,用它来创建完善的Mac OS X应用程序。从官方的 入门教程来看,能够很方便地使用MacRuby构建带GUI的Mac应用。

除了Mac应用,你一定也很想知道能否用MacRuby来开发iOS端的应用,到目前为止Objective-C仍然是官方的首选,也有人 泼过MacRuby的冷水,但MacRuby的开发者并没有放弃,他们开发了 RubyMotion,让开发者能方便地使用Ruby来开发iPhone和iPad的原生iOS应用,且 得到众多好评

上面提到了Ruboto和RubyMotion,就不得不提另一个让开发者能够使用Ruby来开发移动应用的 MobiRuby了。MobiRuby使用了松本行弘开发的 mruby,这是一个轻量级的Ruby实现,可以运行Ruby程序,但主要的目的是嵌入其他程序,并且运行在内存受限的小型设备上,比如松本先生介绍过的Sakura Board。MobiRuby旨在替代移动平台上的Objective-C/C和Java,目前已经能够编写iOS应用,更重要的是 已经有MobiRuby的程序被AppStore接受了。开发团队承诺,后续也会有针对Android的MobiRuby出现。

最后再来看看 MagLev,它是构建于VMware GemStone/S上的64位Ruby实现,让开发者能充分发挥GemStone/S的优势,比如有更好的性能、分布式共享缓存、企业级NoSQL数据管理能力等等。更重要的是它能透明地管理远大于内存上限的TB级别的数据和代码,出于这个原因,也许可以将MagLev看成一个能够运行Ruby、存储Ruby原生对象的分布式数据库。

在看了这么多Ruby家族的成员之后,不知您有何感想?一定觉得这是个充满活力的语言吧。如果您一直在使用官方的Ruby实现,那么不妨试试其他的实现,也许会有别样的感觉。

您可能也会喜欢

相关 [文章 向荣 ruby] 推荐:

文章: 欣欣向荣的Ruby家族

- - InfoQ cn
诞生于1993年的 Ruby即将迎来自己的20岁生日,估计松本行弘(Matz)先生20年前也没有想到Ruby能成为一门流行的语言,长期出现在 TIOBE编程语言排行榜前20之列,并且有 逐步上升之势. Ruby的爱好者遍布世界各地,在中国也有庞大的 RubyChina社区. 而且,除了Matz的MRI Ruby之外,还诞生了很多与其兼容的Ruby实现,有的旨在提升性能,而有的则是为了充分利用其他平台提供的资源,还出现了专门针对移动设备和嵌入式设备的版本.

了解Ruby Gems

- Jacky - Reborn
所谓RubyGem,就是一个个软件包,通常被简称为“gem”. 通常一个Gem里包含一个Ruby应用程序或者一个Ruby程序库. 而RubyGems软件本身允许用户在自己的系统中轻松地下载、安装、操作Gems. 以下两个网址无论如何都应该放到自己的收藏夹里:. 最著名的Gem之一,当然是Rails——当我们安装Rails的时候,使用的命令行是:.

开始Ruby

- TheLover_Z - 博客园-首页原创精华区
我的上一篇为什么要学动态语言和大家分享了一些心得,如果有人因此想试试动态语言,哪怕是一点点,我也很高兴,毕竟自己写的东西还有点意义. 俗话说,万事开头难,但是开始用动态语言一点也不难,还是以ruby为例. 1.首先来看看这个网站, http://tryruby.org/. 顾名思义,这个网站的目的就是让大家试试Ruby,我觉得做的比较好的就是它有一步步的教程,只要照着它的提示一步步往下,就能领略Ruby的魅力.

Ruby On Rails 4 hello world,Ruby On Rails上手

- - CSDN博客Web前端推荐文章
有机会再试一试Rails了,只是原来接触的是2,现在已然变成了4,似乎现在的安装比原来会快些. 似乎这就是当前的最新版本. 似乎这就是诸如Django、Rails这类对于轻量级网站的数据库要求. 其他可以看情况安装,如openSUSE. 可以直接用rails生成. 这样的话打开  http://localhost:3000 就可以看到,Rails的欢迎界面Welcome aboard,有点类似于Django-CMS的小马哥~~.

安装rails(ruby on rails)

- - BlogJava_首页
  记得两年前使用ror做网站,自动生成功能记忆犹新,只是当时网络知识实在缺乏,体会不到其中的乐趣. 现在了解的很多了,书也有两本,一直想重新体验最新版做个网站. 安装这个过程实在有点坑爹,查找网上若干ror的书包括2012年版的书,按照上面的步骤都没法安装完成,搞得我一会在linux下试验,一会在windows下试验,都没成功,只好放下.

Ruby视频资料清单

- Shu. Wang - 欧阳的技术笔记
斯坦福Ruby与Rails进行Web开发的开放课程. 通俗易懂,不过其中课程使用的Rails版本是2.3. 同时,本课程配合斯坦福系列开发课程,是非常好的自学材料. lynda公司出品的rails3基础教程. 绝对通俗易懂,视频拆分方式很适合等人时间阅读. 并不支持Rails3.1,是Rails3.0.

我的PHP,Python和Ruby之路

- heely - robbin的自言自语
因为看到一篇讨论PHP,Python和Ruby的编程语言讨论贴,就说说我的PHP,Python和Ruby之路吧:. 我2000-2001年用PHP用了两年,那还是第一次互联网泡沫时期,到2001年后期,Servlet/JSP流行,然后我就发现:你说用PHP写的东西,都会被人鄙视. 当时我们其实也用Java了,只不过用Java写后端的消息队列.

关于Ruby 2.0: 我们的计划

- Fred - LetRails
这是Matz在去年10月份做的一个关于Ruby 2.0的主题演讲,正如他所说,Ruby 2.0在特性方面只是向前迈进了一小步,更多的改变将发生在实现层面. Ruby 2.0的新特性包括:. 1.step(a, b) do |i| p i end # 是从a到b,还是从b到a. 减少monkey patch对系统可能造成的负面影响.

Ruby世界:汉字转换成拼音

- 董玉伟 - 道喜技术日记 .^. 天天红玉世界

QQ账号登陆的Ruby实现

- RobinWu - 致力于ROR走入企业开发
腾讯公司最近开放了QQ登陆,这对广大站长是个好消息,从此实现QQ账号登陆您的网站不再是梦想. 但是遍寻腾讯的SDK文档,并不见Ruby的实现,这对Ruby爱好者可不是个好消息. 经过好几天的摸索,我终于成功实现了QQ登陆了. 其中,QQ_KEY和QQ_SECRET换上你们自己的. #用户点击授权后,调用回调方法.