发表于2012-08-16 00:52| 21716次阅读| 来源CSDN| 24 条评论|
作者杨鹏飞

摘要:曾几何时,PC端有那么多种语言可以选择,而移动平台却没得可选?这不科学!也不合理。Laurent Sansonetti,这位在苹果公司工作了7年、负责iLife并且是核心OSX/iOS技术的开发者,首先开发了Mac平台下的Ruby实现:MacRuby,在此基础上又开发了iOS平台下的Ruby实现

这不科学

根据TIOBE历史数据,Ruby和Java、Objective-C同属世界十大编程语言,其中Ruby位列第十,Java第二,Objective-C第三。根据CSDN
2011薪资调查
结果显示,Ruby程序员中,月薪过万所占比例超过33%。

曾几何时,先辈们告诉我们:Android、黑莓是用Java开发,iOS则是Objective-C,Symbian是Qt。但这些都可以在PC端进行开发,而移动平台却没有选择的余地?月薪10K有没有!这不科学,也不合理。

RubyMotion:为需求而生

正是由于不同的理念、不同的需求才导致编程语言分化如此严重。虽然在苹果平台上大多数开发者已经(被迫)适应了Objective-C,但仍然有大批的Ruby爱好者无法忍受Xcode和Objective-C。我曾在《用Ruby开发iOS本地应用的最佳实现:RubyMotion》一文中提到,O'REILLY图书《MacRuby》作者Matt
Aimonetti就吐槽“Xcode经常崩溃,界面复杂”。

介于此,Laurent Sansonetti,这位在苹果公司工作了7年、负责iLife并且是核心OSX/iOS技术的开发者,首先开发了Mac平台下的Ruby实现:MacRuby,在此基础上又开发了iOS平台下的Ruby实现:RubyMotion。RubyMotion的知名度正在圈内不断提升,在邮件列表里不乏看到国内开发者的身影,引起了我极大的兴趣,因此发生了接下来的对话。[
注:其中Y是我名字拼音的首字母,L代表Laurent ]

Y:如果我叫你“MacRuby和RubyMotion之父”的话,不会被打吧?这俩兄弟有啥区别吗?

L:我觉得没问题。当然,两者虽然都是我创建的,但能够获得现在的成绩肯定离不开大量开发者的帮助。两者之间最主要的区别首先在于针对的平台不同,其次是RubyMotion是100%的静态编译,为了照顾iOS设备的处理能力以及App Store的限定规则;而MacRuby则是JIT编译,得益于Mac平台相对更强大的处理能力。

Y:为什么开发者应该使用RubyMotion?

L:俩字:简单。如果你会Ruby,知道Rake,知道一些常用命令,接下来只需了解一下iOS的API,就可以着手开发iOS应用了。你用RubyMotion创建一个项目,在你惯用的代码编辑软件里写代码,然后在模拟器上以及真机上运行,最后提交到App Store。当然,我们还是需要Xcode提供的SDK、模拟器以及数字签名功能,只不过不需要全程使用Xcode,尤其是在撰写代码的时候。

Y:Objective-C很难学吗?你的看法呢?为什么选Ruby?

L:Objective-C是C的一个超集,20年前的时候可谓小革新了一把。但是现在,很多学校已经不教授C语言了,而且很明显C已经成为“高级汇编”语言,大部分开发者更倾向于更高级的语言,例如Ruby、Python或者Javascript。Ruby是Objective-C之外非常好的选择。它不基于C,很安全;拥有简洁清晰的语法;提供了元编程的特性,从而可以创建分层抽象(或者领域特定语言,简称DSL),Rails就是Ruby的一个很好的例子。

Y:RubyMotion是如何处理资源占用的?和Objective-C相比如何?

L:因为Objective-C的GC机制在iOS上不能用(有些开发者对此也颇有微词。编者注),所以我们特别为RubyMotion写了一个内存管理系统。RubyMotion基于Objective-C的引用计数系统并且依赖于autorelease pools (NSAutoreleasePool)实现基于范围内存管理。总之RubyMotion将retain/release信息发送给开发者。最后的结果就是,用起来感觉好像真有一个完整的GC引擎似的。在资源占用方面,二者相当。RubyMotion开发的应用和Objective-C使用同样的运行时,并且能够达到和原生应用一样的运行效率,但肯定要比HTML5应用快。

Y:未来的计划是什么?

L:现在RubyMotion还必须要调用iOS的API,很多时候这些API的名字非常长,这可不是Ruby的风格。未来随着分层抽象的不断完善,Ruby开发者就可以完全抛开iOS的API,纯使用RubyMotion的类库(例如BubbleWrap、TeaCup、Nitron等)。于是我们的应用的代码就可以更短,拥有更好的阅读性和可维护性,更Ruby的感觉。

这不科学

或许在未来,移动设备的处理能力将和现在的PC设备相当,所有PC端的开发语言都可以进行移动应用的开发,曾经的应用开发者对孩子说:“这不科学!”

图片来源:collegeteacher

RubyMotion之父:Ruby是目前替代Objective-C的最佳iOS开发语言的更多相关文章

  1. iOS开发核心语言Objective C —— 全部知识点总结

    本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...

  2. iOS开发核心语言Objective C —— 所有知识点总结

    C和OC对比 OC中主要开发在什么平台上的应用程序?答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头?答:OC中新增关键字大部分是以@开头 OC中新增 ...

  3. 简述 Ruby 与 DSL 在 iOS 开发中的运用

    阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain Specific Language) 翻译成中文就是:"领域特定语言".首先,从定义就 ...

  4. iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用

    swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...

  5. Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

    Qt/C++开发人员眼中的Obj-C      对于我们第一次自己定义iOS应用来说,对于来自Qt/C++开发人员来说,我不得不学习Objective-C相关语法与知识 为了让读者可以更easy理解这 ...

  6. Ruby入门--Linux/Windows下的安装、代码开发及Rails实战

    Ruby入门--Linux/Windows下的安装.代码开发及Rails实战 http://www.linuxidc.com/Linux/2014-04/100242.htm Ubuntu 13.04 ...

  7. 白话 Ruby 与 DSL 以及在 iOS 开发中的运用

    每日一篇优秀博文 2017年10月7日 周六 白话 Ruby 与 DSL 以及在 iOS 开发中的运用 阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain S ...

  8. iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

    本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...

  9. iOS开发——新特性OC篇&Objective新特性

    Objective新特性 Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时, ...

随机推荐

  1. 【移动开发】binder阻塞/非阻塞与单向/双向的问题

    The client thread calling transact is blocked by default until onTransact has finishedexecuting on t ...

  2. LInux last命令详解

    命令简介:     该命令用来列出目前与过去登录系统的用户相关信息.指令英文原义:show listing of last logged in users 执行权限 :有些需要特殊权限 指令所在路径: ...

  3. C++三目运算符的增强

    <p>// 在C语言中表达式的结果放在寄存器中 // 在C语言中,表达式的返回值是变量的值 // 在C++中,表达式返回的是变量的本身</p><pre name=&quo ...

  4. C++_友元函数

    1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率       具体来说:为了使其他类的成员函数直接访问该类的私有变量       即:允许外面的类或函数去访问类的私有变量和保护 ...

  5. 【java虚拟机系列】java中类与对象的加载顺序

    首先了解一下Java虚拟机初始化的原理. JVM通过加装.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.类型的生命周期如下图所示: 装载和连接必须在初始化之前就要完成. 类 ...

  6. Inventory Transactions Manager

    Overview Inventory Transaction Manager用于处理库存接口表(MTL_TRANSACTION_INTERFACE或者MTL_MATERIAL_TRANSACTIONS ...

  7. LAPACK的C/C++接口及代码实例

    今天介绍一个矩阵处理工具LAPACK,她有C\C++接口,可在windows下移植.本人最近正在学习,发现还是还不错滴~ 本博文分为三部分,第一部分介绍LAPACK的安装,这里只介绍最简单的部署:第二 ...

  8. SecureCRT设置linux终端显示颜色

    在linux系统上,我们使用终端时,对于文件或目录会显示不同的颜色.而SecureCRT默认显示的颜色是单一的,我们该如何让其像linux一样显示个性化颜色呢. 使用SecureCRT登录 linux ...

  9. Oracle PL/SQL Articles

    我是搬运工....http://www.oracle-base.com/articles/plsql/articles-plsql.php Oracle 8i Oracle 9i Oracle 10g ...

  10. jsp自动编译机制

    总的来说,Jasper的自动检测实现的机制比较简单,依靠某后台线程不断检测JSP文件与编译后的class文件的最后修改时间是否相同,若相同则认为没有改动,但倘若不同则需要重新编译.实际上由于在Tomc ...