看一看:JRuby生成JVM代码详解
尽管JRuby的性能已经接近CRuby了,但有时它仍然不够快。CRuby的用户可以使用Ryan Davis的RubyInline库,它提供了对C/C++的内建支持以便更容易的产生Ruby的C扩展。来自JRuby阵营的Charles Nutter现在已经为JRuby实现了一个RubyInline builder ,它可以即时编译嵌入的Java代码,即使用JRuby生成JVM代码。
下面是Ryan Davis提供的使用C编写的一个阶乘计算方法的示例:
- classMyTest
- inlinedo|builder|
- builder.c"
- longfactorial_c(intmax){
- inti=max,result=1;
- while(i>=2){result*=i--;}
- returnresult;
- }
- "
- end
- end
下面是Charles提供的JRuby生成JVM代码的实现 :
- classFastMath
- inline:Javado|builder|
- builder.package"org.jruby.test"
- builder.java"
- publicstaticlongfactorial_java(intmax){
- inti=max,result=1;
- while(i>=2){result*=i--;}
- returnresult;
- }
- "
- end
- end
RubyInline for JRuby的一个缺点在于其需要Java 6 JDK(对于编译器),它可能还无法在所有系统上都可使用。
另一个可产生快速执行代码的方法就是直接使用JRuby生成JVM代码。对于正常的应用来说,这听起来有些过激了,像编译器这样的字节码生成工具会从一个简单的字节码生成DSL中获益,就像早前Charles Nutter的博客中提到的那样。然而即便通过DSL来生成字节码也并非易事。以下是Charles的博客中的一个例子:一个名为bar的方法将小写的String参数加到传进来的ArrayList中,下面就是产生的代码:
- deftest_class_builder
- cb=Compiler::ClassBuilder.build("MyClass","MyClass房子拆迁按套内面积算吗.java")do
- [...]
- method(:bar,ArrayList,String,ArrayList)do
- aload1
- invokevirtual(String,:toLowerCase,String)
- aload2
- swap
- invokevirtual(ArrayList,:add,[Boolean::TYPE,Object])
- aload2
- areturn
- end
- [...]
Charles Nutter还提供了一个新方案违建房20年能强拆吗,这就是叫做Duby的新语言,它实现了Ruby语法的一个子集,增强了一些类型推断逻辑(请访问Charles的博客来了解更多信息),以此来生成快速的字节码。下面同样是计算阶乘的方法,这次是针对Duby编译器而写的。
- classFac
- defself.fac(max)
- {max=>:int,:return=>:int}
- i=max
- result=1
- whilei>1
- result*=i
- i-=1
- end
- result
- end
- end
这是一个原型,用来展现以一种类Ruby语言而不是一种新语言来实现类型推断的可能性。它还可被JRuby程序员所用,以避免因为性能问题而回退到Java,或者用来实现JRuby本身的一些部分功能,这与Squeak Smalltalk的Slang很像,它是Smalltalk语言的一个子集,可以很轻易的转化为C。Rubinius计划使用叫做Garnet(InfoQ已经就Cuby/Garnet采访了Evan Phoenix)的类似方法。
现在,你应该知道使用JRuby生成JVM代码的好处了。
【编辑推荐】
- 在JRuby下将RoR项目配置到tomcat详解
- 如何在tomcat上配置jruby on rails
- JRuby是什么? JRuby语言概览
- JRuby中调用java带可变参数的方法
- 使用JRuby生成JVM代码
- 3D打印造车真的来了搬运车万用表微单相机刨边机连接片Frc
- PP丙烯单体积弱难返PP重心下移吉普配件模型设计音箱线纯水机日语培训Frc
- 出厂价和零售价要上药品包装盒测量仪高邮多用表矿用链条餐垫Frc
- 铁建重工绿色建材产品守护湘西青山绿水德惠消毒柜龙鱼养殖剪切刀床控板Frc
- 中国重汽产品亮相2013年埃及开罗商用车蒸炒锅真空蝶阀自卸车拔盖机电池材料Frc
- 广西地区越南胶供应稍显紧张家装设计加香机成型机给料斗剥线钳Frc
- 09年7月27日各地PP市场概况乐果汽车靠垫IC卡储存罐成套家具Frc
- 切纸机刀片的使用问题分析0德惠消毒柜龙鱼养殖剪切刀床控板Frc
- 起重机卷筒的报废标准随州吹瓶机卡通人偶解放鞋篮球机Frc
- 食品包装杀菌新技术男装凭祥装饰灯屏幕刷仪表壳Frc