论坛首页 编程语言技术论坛

忽然想明白了XRuby是个爆有前途的项目阿!

浏览 24062 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-09  
yawl,dreamhead他们搞XRuby项目,我除了敬佩他们的精神之外,一直对XRuby走的编译路子颇不以为然,总想,把动态的ruby代码编译成了静态的class以后,就丧失了RoR快速修改代码的优势了。但今天突然想明白了,这绝对是一个爆有前途的项目!

现在RoR要进入企业应用,面临的最大障碍是什么?我认为不外乎两点:

1、企业对于非Java平台解决方案的排斥

现在大多数企业应用都是构建在Java平台上的,你让他采用dotnet都不干,更别说ruby了。但大家想阿,我用RoR开发的一个项目,然后我编译成Java class,给他部署到JVM上面去跑,他不就是一个100%纯粹的Java项目吗?我理直气壮的告诉客户我们这是用Java开发的项目,要看源代码?简单阿,我用jode再把ruby编译好的Java class反编译成Java源代码。

2、脚本语言难以保护源代码

虽说Java的class也不难破解,但是作为产品去卖,让人家毫无障碍的拿到源代码,总是不行。这是导致很多软件公司无法拿RoR直接做产品的很重要的原因。当然,如果你有本事hack ruby解析器,对源代码进行加密未尝不可。但是有了XRuby,一切就简单了。把代码编译成Java class部署在Java应用服务器上面跑就是了,还可以告诉客户,这个软件是我们用Java开发的。哈哈。

不过真要完全把ruby代码编译成Java class,难度也不小,你需要把所有的ruby类库,包括完整的rails类库全部编译成为Java class,中间哪个环节出问题都不行。所以代价还是不小滴。
   发表时间:2007-03-09  
这个东西的结果,有点象VB,它既可以解释运行,又可以编译运行。
0 请登录后投票
   发表时间:2007-03-09  
YARV据说也可以扰码,不过作者似乎不太热衷这个
0 请登录后投票
   发表时间:2007-03-09  
听起来不错哦.
0 请登录后投票
   发表时间:2007-03-09  
Ruby编译成JVM instruction很有前途啊,早就盼着这一天了,利用ruby表达能力更强的优势,提高生产效率,也可以大量利用现有的java资源。完全是强强组合。

我对XRuby很敬佩,不过限于资源不足,估计会很快被JRuby(compiled mode)赶上的。没有钱办成事不容易啊。
0 请登录后投票
   发表时间:2007-03-09  
robbin 写道

不过真要完全把ruby代码编译成Java class,难度也不小,你需要把所有的ruby类库,包括完整的rails类库全部编译成为Java class,中间哪个环节出问题都不行。所以代价还是不小滴。


几年前就有开始把 java程序编译成 .exe的不依赖于 jre的开源项目,到了现在也没有一个真正可用的,都是一些简单的 helloworld程序可以,但是大部分java项目依赖的类库结构都是庞大复杂的
0 请登录后投票
   发表时间:2007-03-09  
bigpanda 写道
Ruby编译成JVM instruction很有前途啊,早就盼着这一天了,利用ruby表达能力更强的优势,提高生产效率,也可以大量利用现有的java资源。完全是强强组合。

我对XRuby很敬佩,不过限于资源不足,估计会很快被JRuby(compiled mode)赶上的。没有钱办成事不容易啊。


XRUBY和JRUBY的目的不一样吧。
JRUBY是用Java来写一个ruby解析器。
而XRUBY是希望将.rb的脚本变成.class的Java类文件啊。

PS: to 楼下的bigpanda兄弟:恕我寡闻了,不好意思,不应该妄自菲薄,自己没研究就瞎说
0 请登录后投票
   发表时间:2007-03-09  
首先,感谢Robbin看好XRuby,其次,声讨Robbin把我的ID写错。

接下来说正经的。

前不久,和On Ruby的Pat交流的时候,我提到,XRuby给了我们一个将Ruby和Java结合起来的机会,也就是把开发效率(Ruby)和丰富的资源(Java)结合起来。

从接受程度来说,与原有的东西比较好的结合,才能让人们更好的接受。从汇编到C,二者几乎直接对应;到C++,以兼容C为初始目标;再到Java/C#,使用原有语法。现在的Java很成熟,所以,已有的资源不可能全盘抛弃,最好的办法就是借助其力量发展。其实,大家现在很明白,在未来的软件开发中,开发效率要更加重要,所以,大家一致瞄准了动态语言。但怎样将二者有机的结合起来,是大家共同在探索的。现在Ruby和Python在这条路上都有探索者,XRuby也是其中之一。而Robbin所讨论的两点就是一个很好的结合方式。

从技术上说,Robbin对XRuby还存在一些误解。

不是说XRuby将Ruby代码编译成Java代码就会丧失其特性,这是由实现机制决定的。可以想想,Ruby的底层是用C实现的,但它同样支持动态特性,为什么?因为它在下面搭建一个动态结构。同样,在XRuby中,底层也有一个支持动态特性的结构,也就是说,即便编译成了.class文件,如果需要动态修改,还是可以做到的。从这点上来说,不会丧失Ruby的动态特性。

对于许多人,提到XRuby,可能首先会想到JRuby。但是截至目前发布的版本而言,XRuby和JRuby的差异还是很大的。编译的部分从理论上相差无几,其差异主要在执行代码的过程中,XRuby是在JVM上架起了一个动态语言的结构,而JRuby实际上相当于用Java重写了Ruby的执行引擎——从层次上来说,对应着JVM。如果做个对比的话,那么JRuby要比XRuby多了一个层次,而且,它重写的是本来就为人诟病的Ruby的执行引擎,所以,它的效率一直是个问题。

不过,JRuby在做的编译模式,同XRuby很像,所以,从JRuby开发者的blog上可以看到,JRuby的编译模式性能得到了极大的提升。相对而言,XRuby的优势就是在这个问题上,走得比JRuby快了一些。

前面说过,XRuby有一个支持动态特性的结构,其实,这也是一个消耗性能的部分,但是,这是由于JVM本身不支持动态语言的特性造成的。据说现在JVM也要为动态语言添加指令,这可以让我们期待更大的性能提升。

当性能达到可用的时候,我们可以就可以对Ruby和Java的结合有更大的期待。

0 请登录后投票
   发表时间:2007-03-09  
冉翔 写道

XRUBY和JRUBY的目的不一样吧。
JRUBY是用Java来写一个ruby解析器。
而XRUBY是希望将.rb的脚本变成.class的Java类文件啊。


JRUBY有编译模式的。
0 请登录后投票
   发表时间:2007-03-11  
第一点不切实际把,如果项目真的很大的话,这些都有专人管的。项目所用的开源项目、页面所用的组件都要登记,留下使用文档,并说明在项目中的应用等等。
无论如何是理直气壮不起来的...
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics