BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Mobile Ruby综述:Symbian Ruby 1.9、Android、JME、iPhone及Mono

| 作者 Werner Schuster 关注 6 他的粉丝 ,译者 张龙 关注 12 他的粉丝 发布于 2008年11月25日. 估计阅读时间: 3 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

Ruby 1.9针对Symbian的版本已经发布了,之前针对Symbian的Ruby 1.8版也早已出现(同时还有Python for Symbian)。

除了应用于Symbian的Ruby,现在还缺少对移动电话上的Ruby的支持。不过我们可以在Android上运行Ruby的ARM版

既然Android基于Java,我们当然就可以在它上面运行JRuby了。一个需要注意的问题是Android不会执行Java字节码,而是执行Dalvik字节码(我们必须将JVM字节码转换成Dalvik字节码)。在JRuby用户列表的一个讨论中,JRuby的Charles Nutter列举出了如下可能的解决方案

有如下两种可能的执行场景会突破这些限制:

* 纯解释,所有的代码在设备上完成了解析并且通过我们的AST-walking解释逻辑执行。其速度可能比我们想的要慢点但实现起来很简单。

* 纯编译,所有的调用和处理都提前生成好。

在当前的代码基上已经实现了这两种方式;还需要做的一件事就是生成一个可用的.jar文件,该文件只会提供其中一种方式并且不会依赖于另一种方式。

当前在JME上运行JRuby实在不是一个好主意。早在2007年的JavaOne大会上就已经介绍了针对JME的JRuby版本。这个链接页面上的Zip文件含有该介绍的幻灯片,它详细说明了如何得到JRuby的一个子集以运行于JME上。因为JME是Java的一个简化版,因此要想让JRuby运行于其上需要对JRuby的很多内容进行重写。当前版本的JRuby依赖于Java 5——但正如幻灯片中所述,JME缺少Java 1.2之后所增加的那些类和方法。其中最缺少的就是正则表达式和大部分Collections API。

针对iPhone的IronRuby和Mono很快就要出来了。但iPhone AppStore不提供解释器的下载,最新版本的Mono提供了一个解决方案:提前编译,也就是说将CIL中的代码编译到CPU指令中,对于iPhone来说就是编译到ARM指令中。因为IronRuby可以将Ruby代码编译到CIL中而不是对其进行解释,所以我们可以将Ruby应用编译到CIL中,接下来AOT再来编译并在iPhone中运行该应用。正如Miguel de Icaza所述,要想成功运行IronRuby代码,我们还需要解决一些小问题

当然,一旦移除了JIT,你将无法使用任何动态生成的代码。这意味着如果没有Reflection.Emit,也就没有了IronPython/IronRuby。

John Lam在PDC上跟我说他们正在研究如何实现IronPython/IronRuby/DLR的静态编译,因此这种限制很可能是短暂的。

查看英文原文:Mobile Ruby Roundup: Symbian Ruby 1.9, Android, JME, iPhone and Mono

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT