Python/Ruby 作为移动操作系统
我在想,为什么智能手机或移动设备的操作系统不选择动态语言作为主要编程语言呢?比如,iPhone用的是Objective-C,谷歌的安卓用的是Java,Windows Mobile则可以用各种.NET语言。
如果移动操作系统用Python、Ruby或者其他动态语言来编写,会有什么样的理由呢?我明白在底层可能不太适合,但C或C++就可以用来处理这些底层的事情,然后像Python这样的语言可以在上面与之互动。我是说,像Jython或CPython这样的东西也存在。
我只是好奇,为什么现在的移动操作系统中没有更多对动态语言的支持。
13 个回答
在手机上使用多种语言的情况其实比问题中提到的要好得多。现在,Java(在它的J2ME版本中)甚至在一些比较便宜的手机上也能使用。Symbian S60系统官方支持Python,还有小部件的Javascript,另外还有一个Ruby的移植版,虽然它还在实验阶段。Charles Nutter曾尝试在Android上运行JRuby。rhomobile声称可以用Ruby开发应用,然后这些应用可以在所有主要的智能手机操作系统上运行,虽然这种跨平台的说法可能会限制应用的功能。
需要区分的是手机操作系统(负责资源的共享和保护)和运行时平台(为用户编写的应用提供工作环境和一套API)。一个操作系统可以支持多种运行时,就像在Windows上可以同时运行C++和Java应用一样,尽管Windows本身是用C++写的。
不同的运行时会有不同的性能特点,并且对操作系统和硬件的功能暴露程度也不同。例如,J2ME在很多设备上都可以使用,但在许多设备上,J2ME运行时并不能访问相机或拨打电话的功能。而“原生”运行时(也就是用和操作系统相同语言编写应用的运行时)在这方面也没有区别:原生应用能做什么,取决于运行时的限制。
与问题的前提相反:最早的主流移动设备之一是Newton,它是为了使用一种叫做NewtonScript的特殊动态语言来开发应用程序而设计的。Newton的开发环境和语言让应用程序之间的协作和信息共享变得特别简单,这几乎与现在的iPhone体验截然相反。虽然许多开发者在从头开始编写新的Newton应用时非常喜欢它——NewtonScript的感觉很像Ruby——但Newton在性能上存在一些问题,现有代码的移植也不容易,即使在苹果后来添加了将C代码整合到NewtonScript程序中的能力之后。此外,在Newton上保护知识产权也非常困难——其他开发者在大多数情况下可以查看你的代码,甚至可以随意覆盖其中的部分,这简直是个安全噩梦。
Newton是一个商业失败。
Palm借鉴了苹果的一些最佳想法,并进行了改进,但放弃了动态语言支持,作为整体简化的一部分,这最终导致PalmOS在移动市场上占据了大多数份额(很多年里),因为独立的移动软件开发者纷纷涌向这个新平台。
Newton失败的原因有很多,但有些人可能会把责任归咎于NewtonScript。苹果在iPhone上采取了“不同的思维”,他们似乎早期做出的一个决定是尽可能利用现有的核心开发者基础,并让人们更容易使用Objective C进行开发。如果iPhone将来正式支持动态语言,那将是在经过长时间和仔细考虑后,如何在提供安全和高性能的平台的同时,来实现这一点。
而在他们这样做后的5分钟内,其他人也会跟进。:-)
总的来说,这些因素都是很重要的。内存、速度,还有最重要的,程序员的熟悉度。苹果在Objective C上投入了很多,Java几乎人人都知道,而C#也非常受欢迎。如果你想吸引更多的程序员,选择一些流行的语言开始是有道理的,尽管这可能有点无聊。
其实没有什么技术上的限制阻止我们这样做。我们可以用Ruby写整个系统,然后让程序员把慢的部分用C重新实现,这并不会太麻烦。这对开发移动操作系统的公司来说是一项投资,但最终我不确定他们能从中获得多少好处。
最后,现在才是移动设备的起步阶段。五年后,我一点也不会惊讶看到更广泛的移动技术栈出现。