发表于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. 微软在线测试之lucky string,有关斐波那契的题目都在此了

    解决方案: int _tmain(int argc,_TCHAR* argv[]) { size_t fib[] = {1,2,3,5,8,13,21,34}; string str,tempstr; ...

  2. mac OS X 从无法同步互联网时间想到的

    最近在mac OS X 巨浪 :)上执行 ntpdate time.nist.gov 失败,提示 13 Jan 19:41:53 ntpdate[1374]: the NTP socket is in ...

  3. 02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

     项目结构(所需jar包,配置文件) sqlMapConfig.xml的配置内容如下: <?xmlversion="1.0"encoding="UTF-8&qu ...

  4. android开发之AlertDialog点击按钮之后不消失

    最近有这样一个需求,我需要用户在一个弹出框里输入密码来验证,验证成功当然好说,但是如果验证失败则需要把alertdialog的标题改为"密码错误,请重新输入",并且这个alertd ...

  5. 【java虚拟机系列】java虚拟机系列之JVM总述

    我们知道java之所以能够快速崛起一个重要的原因就是其跨平台性,而跨平台就是通过java虚拟机来完成的,java虚拟机属于java底层的知识范畴,即使你不了解也不会影响绝大部分人从事的java应用层的 ...

  6. 北大青鸟Asp.net之颗粒归仓

    自从小编走进编程的世界以来,学习的编程知识都是和C/S这个小伙伴握手,直到做完牛腩老师的新闻发布系统,才开始了小编的B/S学习生涯,和B/S初次谋面,小宇宙瞬间爆发了,看着自己的第一个B/S系统,牛腩 ...

  7. 控件之combox

    一. combox显示     首先combox有两个属性来存储数据:DisplayMember(显示成员),ValueMember(值成员) ,DisplayMember是我们在combox界面上看 ...

  8. 工作中常用的Linux命令

    1.从其他机器拷贝文件夹 格式: scp -r 文件夹名 用户名@机器名:/路径 范例: scp -rsearch work@zjm-testing-ps23.zjm.baidu.com:/home/ ...

  9. android:padding和android:margin的区别 详解

    转载请说明博客地址:http://blog.csdn.net/qq_32059827/article/details/51487997 看了网上的类似博客,并没有给出确定的区别.现在具体分析一下pad ...

  10. (四十一)数据持久化的NSCoding实现 -实现普通对象的存取

    NSCoding可以用与存取一般的类对象,需要类成为NSCoding的代理,并且实现编码和解码方法. 假设类Person有name和age两个属性,应该这样设置类: .h文件: #import < ...