MobiRuby的野心:用Ruby替代Objective-C/C/Java
fmms 13年前
<p><strong>Lua 指尖跳舞</strong></p> <p>大家都知道iOS的母语是Objective-C,她诞生了超过50万款的应用,为App Store和开发者创造了大量的价值。但是正如这个世界有航母,同时也有护卫舰一样,有时候我们只是希望能够快速的添加一些扩展以及定制功能,这个时候使 用Objective-C就可能会有大炮打小鸟的感觉。于是一些开发者转而去需求轻量级的替代方案,比较知名的如<a href="/misc/goto?guid=4958337489103135996" rel="nofollow" target="_blank">移动开发新宠:Lua语言</a>,已经在以《魔兽世界》为代表的网络游戏中,包揽了几乎所有的插件,核心的C++代码只占全部代码中的很小一部分比重。</p> <p><img alt="MobiRuby的野心:用Ruby替代Objective-C/C/Java" src="https://simg.open-open.com/show/43aaef85a8b97e23c536e7da50b0a10f.jpg" width="204" height="204" /></p> <p>Lua的设计初衷并非意图构建完整的应用,而是嵌入在应用程序中为应用提供灵活的扩展和定制功能。所以Lua仅提供了基本的数学运算和字符串处理等 函数库,在语言兼容性上,Lua一开始就瞄准了具有广泛应用场景的C和C++,让C/C++编写的代码可以很方便地调用Lua脚本,同时C/C++函数也 能够在Lua脚本中调用。与C/C++代码的良好交互性,让Lua在应用程序开发中有着广泛的应用基础。</p> <p><strong>Ruby 轻盈移动</strong></p> <p>同Lua不同,Ruby诞生于1993年,那个时候甚至连传统互联网都不是“那么”的普及。Ruby的理念是:</p> <blockquote> <p>减少编程时候的不必要的琐碎时间,令编写程序的人高兴,是设计Ruby语言的Matz的一个首要的考虑;其次是良好的界面设计。他强调系统设计必须强调人性化,而不是一味从机器的角度设想。</p> <p>via <a href="/misc/goto?guid=4958337489916139845" rel="nofollow" target="_blank">维基百科</a></p> </blockquote> <p>这正契合了移动开发的特点:人性化、轻量级、快速开发。在Ruby的基础上,Matz开发了<a href="/misc/goto?guid=4958337490698695091" rel="nofollow" target="_blank">mruby</a>,并在2012年4月20日进行发布。根据作者官方介绍:mruby是一款轻量级的Ruby实现,遵循ISO标准。它可以以解释的形式或者在VM上编译和执行形式运行。</p> <p><img style="width:565px;height:353px;" alt="MobiRuby的野心:用Ruby替代Objective-C/C/Java" src="https://simg.open-open.com/show/c8ef49ae40597f9cf7ed4d5441323a84.jpg" width="600" height="375" /></p> <p>图片来源:<a href="/misc/goto?guid=4958337491494849323" rel="nofollow" target="_blank">bounceweb</a></p> <p><strong>MobiRuby 取代Objective-C的野心</strong></p> <p>前面铺垫了这么多,现在我们再来谈MobiRuby就轻松多了。<a href="/misc/goto?guid=4958337492286852712" rel="nofollow" target="_blank">MobiRuby</a>脱 胎自mruby,类似于Lua、mruby,可以在几乎任何设备上运行,对语言进行了精简,试图使得编程更加快速和简单。但是比起前辈来,却更加野心勃 勃。作者宣称MobiRuby的目的就是:在移动平台上取代Objetive-C/C/Java。MobiRuby并非像Ruby那样基于GPL协议和 Ruby License,而是采用了更加宽松的Apache License 2.0,之前Android闭源事件的讨论中,CSDN也特别对这两个协议之间的区别进行了<a href="/misc/goto?guid=4958337493094793046" rel="nofollow" target="_blank">简单的阐述</a>。</p> <p><img style="width:524px;height:184px;" alt="MobiRuby的野心:用Ruby替代Objective-C/C/Java" src="https://simg.open-open.com/show/e3920b756ffb86066f1a49e55ba7e00d.png" width="600" height="211" /></p> <p><strong>世界正在变得越来越平,和轻</strong></p> <p>世界已经平的像一块手机屏幕了,而很多人还妄图让它变得更轻,来看一段实例代码,我们就能体会出MobiRuby到底有多轻了:</p> <p><strong>UIAlertView</strong></p> <p><img alt="MobiRuby的野心:用Ruby替代Objective-C/C/Java" src="https://simg.open-open.com/show/c1b2816a1b59086c22468e805b24f93a.jpg" width="244" height="464" /></p> <pre class="brush:cpp; toolbar: true; auto-links: false;">class NSString < Mobi::Cocoa::Object end class UIAlertView < Mobi::Cocoa::Object end def _S(str) NSString._stringWithUTF8String str end alert = UIAlertView._alloc \ ._initWithTitle _S("Hello"), :message, _S("I'm MobiRuby"), :delegate, nil, :cancelButtonTitle, _S("I know!"), :otherButtonTitles, nil alert._show</pre>移动改变了我们的生活,也改变了很多人看待事物的眼光。正如 <a href="/misc/goto?guid=4958337493890811870" rel="nofollow">The Art Of Unix Programming</a>一书中所说:简单就是美。因为我们的生活正在变得越来越复杂,我们的精力正在经受越来越严酷的压力,时刻准备着大量的事情迎面砸来,所以很多时候”如何能够简化步骤完成任务“,远比重量级、功能全面更加实用。