发表于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. Python pygame安装过程笔记

    今天看到一个教程,是关于Python安装pygame模块的.觉得很好,拿来分享一下. 安装Python 额,这个小题貌似在这里很是多余啊.但是为了照顾到刚刚学习Python的童鞋,我还是多啰嗦两句吧. ...

  2. 6、Android Content Provider测试

    如果你的应用中使用了Content Provider来与其他应用进行数据交互,你需要对Content Provider进行测试来确保正常工作. 创建Content Provider整合测试 在Andr ...

  3. UNIX网络编程——epoll 的accept , read, write(重要)

    在一个非阻塞的socket上调用read/write函数,返回EAGAIN或者EWOULDBLOCK(注:EAGAIN就是EWOULDBLOCK). 从字面上看,意思是: EAGAIN: 再试一次 E ...

  4. Coroutine协同程序介绍(Unity3D开发之三)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=496 Coroutine在Uni ...

  5. UNIX网络编程——线程池模式比较(ICE线程池模型和L/F领导者跟随者模式)

    程池模式一般分为两种:L/F领导者与跟随者模式.HS/HA半同步/半异步模式. HS/HA 半同步/ 半异步模式 :分为三层,同步层.队列层.异步层,又称为生产者消费者模式,主线程处理I/O事件并解析 ...

  6. MyEclipse10+Jdk1.7+OSGI+MySql实现数据库的增删改查

    开发环境: Windows2008R2 64位+MyEclipse10+jdk1.7.0_67+MySql5.5 软件安装:myeclipse-10.0-offline-installer-windo ...

  7. Android的stateListDrawable,layerDawable,clipdrawable,AnimationDarwable介绍-android学习之旅(五十五)

    StatelistDrawable资源 代码示例 <?xml version="1.0" encoding="utf-8"?> <select ...

  8. 使用UE4/Unity创建VR项目

    一.主要的步骤是说一下使用UE4,在此之前先说一下使用unity创建的VR项目 1.unity创建oculus rift dk2项目 在unity中创建一个简单的场景,让摄像机能看见场景中的物体,不对 ...

  9. Mybatis事务(一)事务管理方式

    Mybatis管理事务是分为两种方式: (1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交 (2)使用MANAGED的事务管理机制,这种机制mybat ...

  10. 常用Petri网模拟软件工具简介

    常用Petri网模拟软件工具简介 首先要介绍的的一个非常有名的Petri 网网站--Petri Nets World:       http://www.informatik.uni-hamburg. ...