在 JRuby 成功的运行于 Android 上之后(通过 Ruboto——Android 对 JRuby 的支持),最近 Charles Nutter 开始尝试将 JRuby 引入到移动 Java 设备上。当前的 Ruboto 以解释的方式执行 JRuby 代码,而 Charles 打算扩展提早编译(AOT)能力以将 Ruby 代码完全编译成 Java 字节码,之后就可以将其转换为适合 Android VM 的字节码了:
同时还打算触及一下即时编译模式,因为我觉得这要比生成 Dalvik 字节码更容易上手。我已经想好怎么做了。你可以通过命令来“完全编译”目标脚本,这样就会创建.class 文件,其中绑定了运行时会生成的所有方法。这个计划在我心中已经由来很久了。借助于“完全编译好”的 Ruby 代码,你可以轻松将其上传到设备中。
另一个重要步骤就是模块化 JRuby:
假设很多人都会交付预编译的代码而很多库无法正常工作,这样我们就需要模块化 JRuby 以识别出不支持的库、解析器、解释器和编译器问题。这会减少二进制文件的总大小,同时我还有其他一些想法来实现这一点。
编译 Ruby 代码并且只使用 JRuby 中需要部分的能力对于资源受限的Java ME设备是尤为重要的,这也是 Charles 在其最近的项目 jruby-cdc 中所要解决的问题。正如之前所讨论的,人们已经在考虑 JRuby on Java ME ,但这绝对是个挑战,因为 Java ME 平台有太多的限制了(相比于 JRuby 的目标平台 Java 5 来说)。
现在人们已经将 JRuby 带到了 Java ME CDC 设备上了(CDC 是 Java ME 的一组配置参数):
“cvm”是 Sun 对一种嵌入式 JVM 的参考实现,而且该特别的包还包含了 PBP 级别的 API。这里我已经将 jruby.jar 从 jruby-cdc 项目中剥离出来了,但需要做一些转换以兼容于 Java 1.3 的字节码。
Rhodes 项目已经对很多移动平台上的 Ruby 提供了部分支持,这是通过 MRI(针对 Symbian 或 Windows Mobile 设备)或针对特定设备(如黑莓)的客户化 XRuby 实现的。剥离了某些特性的 JRuby(可以提早编译为 Java 字节码)当然也可用于 Rhodes 项目了( Rhodes 位于 Github 并且是开源的,这样一旦 AOT 编译可用,我们就可以拿 JRuby 实验了)。
Rhodes 平台一个有意思的地方就是其基于 HTML 的 GUI 环境了,通过扩展它可以访问设备特性,如位置、摄像头等等。其观念类似于针对新WebOS 的Palm ,也就是说使用HTML、Javascript 和其他Web 技术来构建本地应用,区别在于Rhodes 应用的后端可以用Ruby 编写。
Rhodes 的目标在于智能手机,而 JRuby on JME 想要占领低端市场,Charles 指出:
为何烦心?现在仍有不少 Java ME 设备。虽然口袋中的设备可能不是 Java ME,但卧室中的机顶盒或蓝光设备却可能是。技术还很绚烂,只是不如 iPhone 或 Android 那么惹人注意罢了。我们的目标是“Ruby everywhere”,你觉得可行不?
你对 Java ME 或 Android 设备上的 JRuby 有何高见呢?
查看英文原文: JRuby on Java ME/CDC
评论