设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 Google 查看内容

RubyMotion宣布将支持Android

2014-8-19 15:20| 发布者: joejoe0332| 查看: 2217| 评论: 0|原作者: 李士窑|来自: InfoQ

摘要: RubyMotion为开发者带来了使用Ruby编写iOS和OS X 应用的一系列工具,它使用基于LLVM编译器进行代码编译,将Ruby编写的程序代码编译成本地原生代码。即将发布的3.0版本将支持Android应用的开发。 ...

  RubyMotion为开发者带来了使用Ruby编写iOS和OS X 应用的一系列工具,它使用基于LLVM编译器进行代码编译,将Ruby编写的程序代码编译成本地原生代码。即将发布的3.0版本将支持Android应用的开发。Android的开发过程将类似于在iOS平台上的开发:Rake用来构建和运行应用,并生成清单文件和处理资源文件。


  HipByte为Android版本构建了一个全新的Ruby运行库。为了提高性能和实现与Java的互操作性,Ruby的核心类(Fixnum、String、Array等)都是同Java对应的。


统一的运行方式使得它与Java API能够很好的整合在一起,由于对象不必使用桥接方式进行整合,因此整体上具有良好的性能表现。运行库将通过调用Java本地接口实现与Java的整合。不仅如此,Ruby版本的运行库本身就包含了Android的整套API。

内存管理委派给了Dalvik的逐代回收和并发垃圾收集器。当需要创建和销毁全局引用时,运行库负责做这些事情,如一个实例变量是一个集合时,而局部变量的内存回收是在编译时确定的。

垃圾收集器是非常高效的,它在每个线程上都分配了对象分配池,实现了快速的对象分配。它会在指定的线程上运行终结方法,并能够妥善处理循环引用的问题。


  我们很好奇,他们是如何实现Ruby运行库的垃圾回收器,如何以静态方式把Ruby代码编译成机器码,以及如何与Android运行库进行整合。所以我们对HipByte的创始人Laurent Sansonetti做了一次访谈。


InfoQ:使用 RubyMotion的时候,在不需要桥接的情况下就能够实现将 Ruby的类直接映射到Java类,并且依然能够被编译成机器码,您能详细说明这一切是怎么发生的吗?

Android的Java虚拟机有一套对应C语言的API叫做JNI,它允许开发者使用C代码与Java虚拟机进行交互。在Android系统里,这就是NDK的一部分。

RubyMotion是Ruby的静态编译版本。静态编译器能够将Ruby代码转换成机器码。在Android中,生成的机器代码能够调用JNI API实现与的Java交互(例如发送Java方法)。

整个处理过程和新的Android运行原理(简称ART)是相似的。据我所知,唯一的不同之在于,RubyMotion开发的应用程序被预编译成机器码,而在ART中,应用程序是在运行设备上进行编译的。

Ruby的对 象模型已经使用Java进行了重写,这就意味着Ruby的所有对象到Java对象的对应无需进行桥接、修改、转换,反之亦然。类似的,一些Ruby核心内 建类是也是与Java一一对应的(如Ruby中的Array就是基于java.util.ArrayList的)。


InfoQ:当您编译代码时,您是怎么处理Ruby元编程组件的?

事实上,RubyMotion提供的Ruby的编译版本完全支持元编程。我们提供了一整套元编程API,#eval是唯一的一个例外,因为我们没有在应用中提供解释器(主要还是为了遵循苹果的政策)。


InfoQ:您是使用Dalvik的垃圾回收器,但是垃圾回收器是怎么回收本地代码分配的内存呢?

由Ruby代码生成的本地代码是间接使用Dalvik (或者 ART)垃圾回收器进行垃圾回收的,因而所有的内存都是托管对象。对于一些特殊对象,运行库需要进行手动分配内存,并且在调用finalize时,进行这些对象的内存回收。


InfoQ:我是否还能够继续使用我最喜欢的RubyGems?

支持Android版本的RubyMotion具有一定的局限性,这和支持iOS与OS X版本的RubyMotion是一样的。这是因为RubyMotion是Ruby的一个静态编译版本,#require 是被不支持的(在编译时必须提供所有文件),另外, #eval也没有被实现(参见上文)。因此,常规的RubyGems不能正常使用。

RubyMotion有专门为自己设计的gems,motion-toolbox.com有一个由社区维护的精选的RubyMotion库列表。


InfoQ:您现在能说下关于RubyMotion开发的应用程序性能的一些情况吗?当使用JNI时,应用程序有没有显著的性能降低?

我们还没有在性能方面投入过多精力,但是做了初步的测试,并且这些测试运行良好,也没有明显的性能下降[TS1] 。调用JNI看上去也没有问题。事实上,它和很多Android运行库有一样的性能表现,并且都使用了相同的API。


InfoQ: 谢谢您接受我的采访


  支持Android版本的RubyMotion目前还未发布,但他们正在寻找感兴趣的beta版本测试者。最终的版本将在今年晚些时候发布。


  您是否有RubyMotion实现的iOS应用,且正打算迁移到Android环境?您是一个想要使用Ruby编写应用的Android开发者吗(或许你已经是了)?你对使用RubyMotion进行Android应用开发有什么想法吗?


查看英文原文RubyMotion Announces Android Support

转自 http://www.infoq.com/cn/news/2014/08/rubymotion-android?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部