当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

操纵JRuby生成JVM代码[Java编程]

赞助商链接



  本文“操纵JRuby生成JVM代码[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

固然JRuby的性能已经接近CRuby了,但有时它仍旧不够快.CRuby的用户可以利用Ryan Davis的RubyInline库,它供应了对C/C++的内建支持以便更简单的产生Ruby的C扩大.来自JRuby阵营的Charles Nutter目前已经为JRuby实现了一个RubyInline builder ,它可以当即编译嵌入的Java代码.

下面是Ryan Davis供应的利用C编写的一个阶乘计算办法的示例:

class MyTest
inline do |builder|
builder.c "
 long factorial_c(int max) {
 int i=max, result=1;
  while (i >= 2) { result *= i--; }
  return result;
 }
"
end
end

下面是Charles供应的呼应的JRuby实现 :

class FastMath
inline :Java do |builder|
 builder.package "org.jruby.test"
  builder.java "
 public static long factorial_java(int max) {
  int i=max, result=1;
  while (i >= 2) { result *= i--; }
  return result;
  }
 "
end
end

RubyInline for JRuby的一个缺陷在于其需求Java 6 JDK(关于编译器),它大概还无法在全部系统上都可以利用.

另一个可产生快速履行代码的办法就是直接产生JVM字节码.关于正常的利用来说,这听起来有些过激了,像编译器这样的字节码生成工具会从一个简单的字节码生成DSL中获益,就像早前Charles Nutter的博客中提到的那样.但是即便通过DSL来生成字节码也并非易事.以下是Charles的博客中的一个例子:一个名为bar的办法将小写的String参数加到传进来的ArrayList中,下面就是产生的代码:

def test_class_builder
cb = Compiler::ClassBuilder.build("MyClass", "MyClass.java") do
[...]
method(:bar, ArrayList, String, ArrayList) do
 aload 1
 invokevirtual(String, :toLowerCase, String)
 aload 2
 swap
 invokevirtual(ArrayList, :add, [Boolean::TYPE, Object])
 aload 2
 areturn
end
[...]

Charles Nutter还供应了一个新筹划,这就是叫做Duby的新语言,它实现了Ruby语法的一个子集,加强了一些范例推断逻辑(请拜候Charles的博客来理解更多信息),以此来生成快速的字节码.下面一样是计算阶乘的办法,这次是针对Duby编译器而写的.

class Fac
def self.fac(max)
{max => :int, :return => :int}
 i = max
 result = 1
while i > 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来说,你想利用何种代码生成方法呢?


  以上是“操纵JRuby生成JVM代码[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 操纵JRuby生成JVM代码
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .