发表于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. Cocos2D v3.4.9粒子效果不能显示的原因分析及解决办法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在游戏App中为了衬托气氛我们往往使用一些特殊的图形效果,粒子 ...

  2. 【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型

    关于线程,博主写过java线程详解基本上把java线程的基础知识都讲解到位了,但是那还远远不够,多线程的存在就是为了让多个线程去协作来完成某一具体任务,比如生产者与消费者模型,因此了解线程间的协作是非 ...

  3. 【一天一道LeetCode】#202. Happy Number

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...

  4. CentOS上PHP完全卸载

    想把PHP卸载干净,直接用yum的remove命令是不行的,需要查看有多少rpm包,然后按照依赖顺序逐一卸载. 1.首先查看机器上安装的所有php相关的rpm包 [root@localhost ngi ...

  5. Android初级教程人品计算器

    先看布局: main_activity.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...

  6. 第七天:创建WBS

  7. Mybatis源码之Statement处理器RoutingStatementHandler(三)

    RoutingStatementHandler类似路由器,在其构造函数中会根据Mapper文件中设置的StatementType来选择使用SimpleStatementHandler.Prepared ...

  8. mongoDB介绍、安装、搭建简单的mongoDB服务器(一)

    相关网站 1. http://www.mongodb.org/ 官网,可以下载安装程序,和doc,和驱动等. 2. http://www.mongoing.com/ 国内官方网站,博客,问题谈论等  ...

  9. 结构体:探析C#文件方式读写结构体

    最近直在研究Net Micro Framework字体文件(tinyfnt)由于tinyfnt文件头部有段描述数据所以很想 定义个结构体像VC样直接从文件中读出来省得用流个个解析很是麻烦 没有想到在中 ...

  10. Android ViewManger解析 从ViewRoot 源码分析invalidate

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/48443429,作者:skay     通过学习了AndroidUI之绘图机基础知道 ...