`
dreamhead
  • 浏览: 43136 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

XRuby发布了!

    博客分类:
  • ruby
阅读更多

XRuby是什么?它是一个编译器。与其它编译器一样,它完成的工作是将一种格式的语言转换成另一种。与大多数编译器不同的是,它是将Ruby的代码(.rb)转换成Java的bytecode(.class)。XRuby是一个开源项目,很荣幸,我是这个项目的成员。

提起Ruby和Java的组合,现阶段,在人们脑中率先撞线的多半是JRuby。JRuby确实在结合Ruby和Java这条路上走了很长一段时间,尤其是去年SUN吸纳了其几个开发人员,名声一下子壮大了许多。但是,JRuby只是一个用Java开发Ruby解释器,而非编译器,也就是说,它并不是将Ruby代码编译成Java的bytecode。当然,现在JRuby的开发者已经走上了编译这条路,不过,仅仅是刚刚起步。从这个意义上来说,XRuby走在前面。

故事得从头说起。2005年中期,yawl一个人开始了XRuby的开发。项目的最初,开发的只是一个Ruby的语法解析器,所以,那时候的名字叫做RubyFront。在yawl的blog上,不难发现他在开发过程中的一些心路历程和解决的各种各样的问题。经过艰苦的努力,RubyFront发布过两个版本,0.1.20.2.0。到0.2.0的时候,RubyFront已经可以解析Ruby On Rails的1.1.2版本了。

一个人的努力总是有限的,yawl在孤独前行了很长一段时间之后,决定把这个项目开源,吸引更多人一起努力。2006年9月8日,yawl将代码移至Google Code。此时的项目已经超出了一个Ruby语法解析器的范畴,于是,项目名也由RubyFront变成了XRuby。至此,XRuby正式诞生,也开始向一个真正的Ruby编译器迈进。

项目是开源了,但如果还是一个人做,那和不开源是没有分别的。于是,yawl决定为XRuby打第一次广告,吸纳开发人员加入到XRuby中。

我就是这个时候加入的。当时,刚好完成了RHG第一遍的翻译,对Ruby的构造有了初步的理解。看到这样的消息,当然是兴奋不已:自己熟悉的Java、自己喜欢的Ruby、自己想要了解编译器技术。通过与yawl的沟通,我成为了XRuby这个项目的成员,除yawl之外,第一个加入这个项目的成员。

最初的时候,我花了大量的时间去理解yawl的代码。不过,同我之前了解C Ruby的实现有不小的差异。后来我才逐渐弄清楚,原来yawl的代码更多的是根据自己的想法在写,对C Ruby参考的不多。这样做当然有一些好处,不过,也确实遇到了一些问题。所以,后来我按照C Ruby的实现重新写了一个Runtime,但是由于与原来的实现差异很大,所以,暂时没有加入到第一个版本的发布中,希望在下一个版本的发布中可以看见它的身影。在这个过程中,加深了我对Ruby实现的理解,于是,就有了一篇篇的《管窥Ruby》。

在XRuby的开发过程中,发生了一件有趣的事。

有一个叫rubygrammar的项目,目的是开发一个基于Antlr的Ruby语法前端。这个项目聚集一些人气,前期的结果并不太理想,但是受到了很多人的关注。Antlr的开发者Terence Parr就在Antlr网站上上传了这个项目的前期成果,一个半成品的Ruby前端。

JRuby的开发者Charles Nutter想替换掉JRuby中基于YACC的前端,因为它并不是一个很好的选择,于是,他找到了这个项目。一群人在邮件列表中讨论的结果是,发现现在已经有了一个可以工作的Java的Ruby前端,就是XRuby的前端(也就是最初的RubyFront)。他们建议把前端从XRuby分离出来。结果就是yawl把XRuby的前端贡献到rubygrammer中,成为了其项目的一部分。

随着开发的进行,又有几个人加入到XRuby中。截至XRuby发布第一个版本时,除了yawl和我之外,成员还有beanworms,javachina和cpunion。每个人都为XRuby出了自己的一份力。yawl说,没有大家的共同努力,XRuby的进度会更加缓慢,我说,没有yawl,XRuby就不存在。每个人都有自己的精彩,在这里,我无法尽述大家在项目中所起到的作用,但相信大家都和我一样,通过XRuby学到了很多东西。

我不喜欢用国界来区分技术,因为我相信技术是没有国界的。但是不得不说的一点,目前的几个项目成员都是华人,尽管他们有的身在异国他乡。虽然大家在邮件列表中的交流依然使用的是英语,但私下里的中文交流促进了彼此的了解。

现在,XRuby已经发布了第一个版本。事实上,它还很弱小,远远无法达到我们心目中完美的境界,但它已经迈出了第一步。我们愿意看到它一点点成长。刚刚起步的XRuby需要更多人的帮助,它还在发展之中,有很多的机会可以让人发挥自己的才智。不要为编译器这么“高深”的东西所吓倒,事实上,参与这个项目之前,我对编译器也是知之甚少。XRuby为我们提供了这样一个学习提高的机会,只要拥有热情,我们可以学会那些所谓的“高深”。

Ruby的创始人Matz总是把乐趣挂在嘴边,如果你有兴趣,就来和我们一起体验这份开发的乐趣吧!

分享到:
评论
15 楼 dreamhead 2007-03-01  
XRuby 0.1.2发布了!修改了一些bug,增加了一些builtin库。
http://xruby.googlecode.com/files/xruby-0.1.2-src.zip
在项目发布的blog上,还提供了一些性能测试的结果。
XRuby 0.1.2 released

另外,On Ruby的Pat Eyler对XRuby的团队做了一次访谈:
Serial XRuby Interview: Episode I

14 楼 snippet 2007-02-06  
不知道只有SE开发经验,无web开发经验,我直接下手ROR会不会有弊端。
13 楼 netfishx 2007-02-04  
纯支持一下,相信xruby的前途。
12 楼 yawl 2007-02-03  
XRuby在编译ruby成java bytecode方面还是有很大优势的。jruby的compiler才刚刚起步,目前连class/module还不能支持。而且尽管现在jruby对ruby的兼容性不错,如果真要彻底转到编译上来需要对runtime做重写程度的改动,多半变成xruby现在的样子。

jruby的最大优势的就是有两个全职的开发者和很好的运作。赶上来只是时间的问题。

所以对于xruby来说,我觉得最好的定位是做与编译ruby相关的有开创性的工作,让它成为施展新的想法的平台.尽管在某些领域难免和jruby会有重合,只要项目成员能在过程中得到乐趣,这个项目就会一直坚持下去.
11 楼 beanworms 2007-02-01  
就目前而言,java平台上的脚本语言最大的瓶颈之一就是运行效率(递归函数的运行时间惨不忍睹),xruby的效率比jruby要高些,但也不容乐观,XRuby0.2主要目标之一就是用dramhead写的新运行环境代替现有版本,应该可以进一步提高一些效率。
另外,sun公司有人提出在jvm中直接提供动态语言支持,希望可以在java7中尽快看到这个feature.
10 楼 dreamhead 2007-01-31  
Jan 写道


呵呵,我一直在跟踪JRuby的进展。
我在前面提到过,JRuby已经走上了编译这条路,不过,刚刚起步,目前只能编译一小部分代码。但是,因为拥有更多的资源,相信JRuby会走得很快。

thundercao 写道
期待实质性的进展,如果有JVM的支持,不知道运行效率能否有大的提升

目前XRuby的性能并不是很高,我们自己做的测试大约是C Ruby的1倍多一些,当然,测试得很有限。但是,有一些明显的点可以进行性能改进,因为会整合新的Runtime,所以,有一部分工作推到新的Runtime中去做了。

对了,如果哪位知道有比较好的Java profile工具,欢迎推荐一下。
9 楼 robbin 2007-01-31  
thundercao 写道
期待实质性的进展,如果有JVM的支持,不知道运行效率能否有大的提升


虽然ruby解析器的性能不高,但是做web应用,最终瓶颈还是数据库,不管你前端用Java,C,Ruby,最终在性能上没有什么区别。性能并不是ruby的弱点。

XRuby或者JRuby的意义还在于能够让ruby跑在Java这样主流的企业应用平台上面。
8 楼 thundercao 2007-01-31  
期待实质性的进展,如果有JVM的支持,不知道运行效率能否有大的提升
7 楼 Jan 2007-01-31  
JRuby不仅仅是解释器:
http://headius.blogspot.com/2007/01/jruby-compiler-in-trunk-and-ready-to.html

很佩服XRuby的团队,加油
6 楼 dreamhead 2007-01-31  
在XRuby的发布包中,有一个XRuby Hacking Guide,它可以帮助你很快进入XRuby的开发之中。

如果想了解Ruby的实现,我在blog上写的《管窥Ruby》可以作为参考。另外,我对Ruby最初的了解始于《Ruby Hacking Guide》,我和其他的朋友正在翻译它,希望能够尽快将其中完成的部分发布。
5 楼 fredzhang 2007-01-31  
楼主的《管窥Ruby》系列文章真是不错,正是我目前希望深入了解的知识。
4 楼 njmzhang 2007-01-31  
现在有没有什么文档看?
3 楼 dreamhead 2007-01-31  
客观的说,XRuby现在不支持的东西太多了,因为精力有限,它还远未到达能支持大多数应用的水平。

至于robbin提到的问题,至少目前的XRuby还不能支持,而且短时间之内,可能也无法排到日程上来。

所以,我们欢迎更多有热情的人一起参与进来,和我们共同推进XRuby。
2 楼 robbin 2007-01-31  
首先要恭喜XRuby团队,为你们取得的成绩感到钦佩。

我有一个问题要请教:

如果我写的rails应用依赖于第三方的ruby类库,而这个第三方类库是C库,那么如何调用?例如处理rails文件上传的组件file-column依赖于RMagic,而RMagic依赖的ImageMagick是一个纯C的库,RMagic本身也带有C代码。那么用XRuby编译好的rails能支持file-column吗?
1 楼 yawl 2007-01-31  
如果有对做编译器感兴趣的欢迎加入.可供发挥的地方非常多,比如我们的短期任务:
1. 改进runtime让它与c ruby更接近.
2. 更完整的builtin library的实现
3. 完善compiler

现在已经有很多小程序可以顺利运行起来了,我们的下一个目标是让test::unit顺利运行起来.

我也很高兴通过这个项目认识了不少朋友.

相关推荐

Global site tag (gtag.js) - Google Analytics