JRuby是在JVM上实现的Ruby-这意味着什么?

JRuby是在JVM上实现的Ruby-这意味着什么?,jvm,jruby,Jvm,Jruby,这是一个非常初级的问题 JRuby是在JVM上实现的Ruby。这是否意味着创建过程只是从头开始创建Ruby语言,用Java方法和类实现,而不是用C实现?也就是说,每个Ruby方法都是用Java逐个实现的?我认为我的问题根源在于对JVM缺乏了解。这意味着JRuby中运行的所有ruby代码最终都会转换为JVM执行的字节码。当编写和编译JRuby时,或者当JRuby编译器将Ruby代码转换为可以在JVM上运行的代码时,这种“转换”可能已经完成了。更具体地说: 编译器的经典步骤,如lexing/par

这是一个非常初级的问题


JRuby是在JVM上实现的Ruby。这是否意味着创建过程只是从头开始创建Ruby语言,用Java方法和类实现,而不是用C实现?也就是说,每个Ruby方法都是用Java逐个实现的?我认为我的问题根源在于对JVM缺乏了解。

这意味着JRuby中运行的所有ruby代码最终都会转换为JVM执行的字节码。当编写和编译JRuby时,或者当JRuby编译器将Ruby代码转换为可以在JVM上运行的代码时,这种“转换”可能已经完成了。更具体地说:

  • 编译器的经典步骤,如lexing/parsing/AST walking/IR翻译,都是由Java编写的代码完成的
  • 许多核心Ruby类映射到实际的Java类,甚至是实现其功能的库(例如,Ruby
    String
    方法,如
    capitalize!
    ,是在Java类内部实现的,或者一些日期和时间的东西是基于
    joda time
  • JRuby利用JVM特性,如垃圾收集、多线程等
  • Ruby代码可以被JIT转换成Java字节码

    • 这意味着JRuby中运行的所有ruby代码最终都会转换为JVM执行的字节码。当编写和编译JRuby时,或者当JRuby编译器将Ruby代码转换为可以在JVM上运行的代码时,这种“转换”可能已经完成了。更具体地说:

      • 编译器的经典步骤,如lexing/parsing/AST walking/IR翻译,都是由Java编写的代码完成的
      • 许多核心Ruby类映射到实际的Java类,甚至是实现其功能的库(例如,Ruby
        String
        方法,如
        capitalize!
        ,是在Java类内部实现的,或者一些日期和时间的东西是基于
        joda time
      • JRuby利用JVM特性,如垃圾收集、多线程等
      • Ruby代码可以被JIT转换成Java字节码

      这意味着Ruby解析器输出Java字节码而不是Ruby AST。这意味着Ruby解析器输出Java字节码而不是Ruby AST。