写点什么

RubyMotion 宣布将支持 Android

  • 2014-08-17
  • 本文字数:1928 字

    阅读完需:约 6 分钟

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 时,应用程序有没有显著的性能降低?

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

InfoQ: 谢谢您接受我的采访

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

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

查看英文原文 RubyMotion Announces Android Support


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-17 23:292150
用户头像

发布了 92 篇内容, 共 46.2 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

易观千帆 | 11月用户体验GX评测:银行APP用户体验稳定提升,从流量竞争逐渐转向用户体验竞争

易观分析

用户体验 手机银行

软件测试/测试开发 | 使用 cURL 发送请求

测试人

软件测试 自动化测试 curl 测试开发

震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒

华为云开发者联盟

安全 后端 华为云 企业号 1 月 PK 榜 震网

使用“宝塔一键迁移”工具,将单机版typecho博客系统迁移到京东云cvm云主机

京东科技开发者

服务器 京东云 安装宝塔 云迁移 企业号 1 月 PK 榜

合作升级|Kyligence 跬智智能分析平台入选华为云联营商品

Kyligence

数据分析

软件测试/测试开发 | 接口测试之HTTP、HTTPS 抓包分析

测试人

https 软件测试 HTTP 自动化测试 测试开发

SLS:基于 OTel 的移动端全链路 Trace 建设思考和实践

阿里巴巴终端技术

数据采集 Trace 移动端

软件测试/测试开发 | 接口测试之HTTP 协议讲解

测试人

软件测试 HTTP 自动化测试 接口测试 测试开发

【避坑指南】快准狠!一键采购电子元器件

华秋PCB

工具 元器件 PCB PCB设计

软件测试/测试开发 | 使用postman发送请求

测试人

软件测试 Postman 自动化测试 接口测试 测试开发

YonBuilder 应用构建教程之移动端扩展

YonBuilder低代码开发平台

TracedModule: 更友好的模型表示方案,模型训练到部署的桥梁

MegEngineBot

深度学习 开源 MegEngine 模型训练到部署

诠释现代美学设计,TECNO首款笔记本电脑MEGABOOK T1重磅来袭!

Geek_2d6073

ChatGPT中文版重装上阵

felix

openai ChatGPT AIMODELMARKET

又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

华为云开发者联盟

人工智能 华为云 昇腾AI 企业号 1 月 PK 榜

华为云代码检查服务CodeArts Check深度解读——代码缺陷早发现,全面守护软件质量和安全

科技热闻

用 Pipy 做个 HTTP 隧道

Flomesh

HTTP Pipy 流量管理

软件测试/测试开发 | 接口测试常用代理工具

测试人

软件测试 自动化测试 接口测试 charles 测试开发

逃不开的安迪-比尔定律,在智能机器人时代该如何破解?

优必选科技

人工智能 机器人 视觉处理

跳跃表数据结构与算法分析

京东科技开发者

redis 算法 跳跃表; 数据结构算法 企业号 1 月 PK 榜

百度安全入选权威报告《联邦学习与可信AI市场机会分析》典型厂商

百度安全

【深入浅出Spring原理及实战】「源码调试分析」结合DataSourceRegister深入分析ImportBeanDefinitionRegistrar的源码运作流程

洛神灬殇

spring Spring Framework

稳定支撑千万级月活,华为日历背后的英雄

华为云开发者联盟

数据库 后端 华为云 企业号 1 月 PK 榜

Databend 内幕大揭秘第一弹 - minibend 简介

Databend

rust

从指标到洞察力的普罗米修斯

宋小生

Prometheus 普罗米修斯 普罗米修斯监控

直播|镜舟 x Smartbi《后疫情下如何利用数据驱动企业逆势破局》

镜舟科技

数据库 镜舟数据库

书单 | 春节假期,我想把这几本书带回家!

博文视点Broadview

数据库故障致美国超一万航班取消或延迟

NineData

数据库 运维 数据库开发 数据备份 数据系统

EMQ受邀出席华为云Top SaaS领航者私享会,共话SaaS企业发展未来

EMQ映云科技

物联网 IoT 华为云 emq 企业号 1 月 PK 榜

【iOS逆向与安全】系统推送服务(APNS)拦截

小陈

安卓 ios开发 逆向 iOS逆向 ios安全

报告下载 | DQMIS高端闭门论坛成果报告——《2022第六届数据质量管理国际峰会关于数据要素发展几点看法和建议》

数据质量管理智库

数据 数据治理 数据安全 隐私计算 数据要素

RubyMotion宣布将支持Android_Ruby_Mirko Stocker_InfoQ精选文章