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,中间哪个环节出问题都不行。所以代价还是不小滴。
评论
Tin 2007-04-20
这两天在InfoQ上面看到XRuby的很多文章,看InfoQ上说XRuby用了ANTLR,走的是正统的路线,把语法描述和代码生成分开了,这非常适合演进式的开发。如果ruby的语法发生了扩展或者变化它都可以比较容易的跟上。但是JRuby所走的路子在这方面有一些限制,长期下去维护起来成本不低。
robbin所说的也是一个方面,不过似乎让RoR项目放弃所有C Lib也是比较麻烦的做法,这点JRuby和XRuby的解决思路是否有不同呢?
koen 2007-04-03
dreamhead 写道
to koen:
我前面已经解释了XRuby和JRuby目前的区别,二者的主要差别在于执行引擎部分。
XRuby是利用了JVM作为执行引擎,而JRuby是用Java写了一个执行引擎。所以,二者在性能上存在差距,JRuby因为多了一个层次,所以,要慢一些。事实上,差别不小。JRuby现在与C Ruby还有不小的差别,而XRuby在某些情况下已经可以比C Ruby更快了。

当然,如果非要从本质上来说,肯定都是要结合Java和Ruby,这就好比说计算机软件都是为了解决问题一样,没有错,但这样的讨论没什么意义。

另外,Robbin所说的反编译问题只是从道理上来说可行,因为作为编译器的编写者,通常只会考虑生成代码的正确性,而不会考虑其反编译结果的可读性,所以,反编译的代码可读性极差,甚至有些代码无法生成对应的Java语言源代码。我曾经反编译过XRuby生成的bytecode,出现过这样的情况。我记得在JRuby中也有类似的问题。当然,对于那些不求甚解的人来说,反编译的结果是可以拿出去蒙事的。


感谢dreamhead耐心的回复,好长时间没来,现在才看到,真是不好意思。衷心地祝福XRuby项目能够茁壮成长,让外国人也知道中国的软件开发者也有卓越的创造性和编程功力,不是只会用别人的东西。我会一直关注你们的项目的:)
koen 2007-04-03
dreamhead 写道
to koen:
我前面已经解释了XRuby和JRuby目前的区别,二者的主要差别在于执行引擎部分。
XRuby是利用了JVM作为执行引擎,而JRuby是用Java写了一个执行引擎。所以,二者在性能上存在差距,JRuby因为多了一个层次,所以,要慢一些。事实上,差别不小。JRuby现在与C Ruby还有不小的差别,而XRuby在某些情况下已经可以比C Ruby更快了。

当然,如果非要从本质上来说,肯定都是要结合Java和Ruby,这就好比说计算机软件都是为了解决问题一样,没有错,但这样的讨论没什么意义。

另外,Robbin所说的反编译问题只是从道理上来说可行,因为作为编译器的编写者,通常只会考虑生成代码的正确性,而不会考虑其反编译结果的可读性,所以,反编译的代码可读性极差,甚至有些代码无法生成对应的Java语言源代码。我曾经反编译过XRuby生成的bytecode,出现过这样的情况。我记得在JRuby中也有类似的问题。当然,对于那些不求甚解的人来说,反编译的结果是可以拿出去蒙事的。


感谢dreamhead的回复,好长时间没有来,现在才看到,真是不好意思!衷心的祝福咱们中国人的开源项目能够茁壮成长,取得成功!让外国人也看看咱们中国的软件开发者也有卓越的创造性,而不是只会用别人的东西,我会一直关注你们的项目的:)
wiseweidong 2007-03-29
呵呵,泼点水

这有点像中国人抢着学英语

那汉语就是XRuby,英语就是Java

中国人就是...

这说明了什么呢?
bouzouki 2007-03-23
希望以后能够用jruby开发,然后用xruby编译成产品代码,但基础是这两者能够保证程序行为100%的一致,因此希望xruby和jruby两个团队多联系,那就福泽苍生、仙福永享了
wenjixiao 2007-03-20
没戏,这是个错误的方向。
lepingbeta 2007-03-16
引用
我用RoR开发的一个项目,然后我编译成Java class,给他部署到JVM上面去跑,他不就是一个100%纯粹的Java项目吗?我理直气壮的告诉客户我们这是用Java开发的项目,要看源代码?简单阿,我用jode再把ruby编译好的Java class反编译成Java源代码。


这么牛!
dreamhead 2007-03-12
to koen:
我前面已经解释了XRuby和JRuby目前的区别,二者的主要差别在于执行引擎部分。
XRuby是利用了JVM作为执行引擎,而JRuby是用Java写了一个执行引擎。所以,二者在性能上存在差距,JRuby因为多了一个层次,所以,要慢一些。事实上,差别不小。JRuby现在与C Ruby还有不小的差别,而XRuby在某些情况下已经可以比C Ruby更快了。

当然,如果非要从本质上来说,肯定都是要结合Java和Ruby,这就好比说计算机软件都是为了解决问题一样,没有错,但这样的讨论没什么意义。

另外,Robbin所说的反编译问题只是从道理上来说可行,因为作为编译器的编写者,通常只会考虑生成代码的正确性,而不会考虑其反编译结果的可读性,所以,反编译的代码可读性极差,甚至有些代码无法生成对应的Java语言源代码。我曾经反编译过XRuby生成的bytecode,出现过这样的情况。我记得在JRuby中也有类似的问题。当然,对于那些不求甚解的人来说,反编译的结果是可以拿出去蒙事的。
cueheny 2007-03-12
感觉带有讽刺的意味...ch
yananay 2007-03-12
jzk 写道
robbin 写道
我理直气壮的告诉客户我们这是用Java开发的项目,要看源代码?简单阿,我用jode再把ruby编译好的Java class反编译成Java源代码。


Robin哥在说笑话把


确实不像他的风格
jzk 2007-03-12
robbin 写道
我理直气壮的告诉客户我们这是用Java开发的项目,要看源代码?简单阿,我用jode再把ruby编译好的Java class反编译成Java源代码。


Robin哥在说笑话把
抛出异常的爱 2007-03-11
dada 写道
第一点不切实际把,如果项目真的很大的话,这些都有专人管的。项目所用的开源项目、页面所用的组件都要登记,留下使用文档,并说明在项目中的应用等等。
无论如何是理直气壮不起来的...


成为文字后可以申请版权
(我们公司现在有两个这样的版权....)
以后谁维护都 要给我们使用费的...

PS:估计没人能维护的了.....与文档差别太大了.....
koen 2007-03-11
还是不太明白XRuby和JRuby有什么本质的区别,两者的最终目的都是为了在JVM上运行Ruby语言吧?那么有必要分成两个项目来做吗?
dada 2007-03-11
第一点不切实际把,如果项目真的很大的话,这些都有专人管的。项目所用的开源项目、页面所用的组件都要登记,留下使用文档,并说明在项目中的应用等等。
无论如何是理直气壮不起来的...
bigpanda 2007-03-09
冉翔 写道

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


JRUBY有编译模式的。
dreamhead 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的结合有更大的期待。
冉翔 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兄弟:恕我寡闻了,不好意思,不应该妄自菲薄,自己没研究就瞎说
lyo 2007-03-09
robbin 写道

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


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

我对XRuby很敬佩,不过限于资源不足,估计会很快被JRuby(compiled mode)赶上的。没有钱办成事不容易啊。
小林信仁 2007-03-09
听起来不错哦.
robbin
搜索本博客
我的相册
213cbb75-7dae-37b2-b9ce-9e7b49f784d3-thumb
游乌镇
共 33 张
其他分类
存档
最新评论