Python/Ruby作为移动操作系统

10

我想知道为什么智能手机/移动设备操作系统不能用动态语言作为首选语言? iPhone采用Objective-C,Google Android采用Java,Windows Mobile使用各种.NET语言。

如果使用Python、Ruby或其他动态语言编写移动操作系统,会有什么理由呢?我知道在低层级方面它们可能无法胜任,但C或C++是可以胜任的,而Python等动态语言可以作为其上层与其互动的层。我的意思是,已经有Jython或CPython这样的工具了。

我只是想知道为什么今天的移动操作系统中没有更多的动态语言支持。

13个回答

14

总的来说,这一切都涉及到内存、速度,可能最重要的是程序员的熟悉程度。苹果在Objective C上投入巨大,Java被基本上所有人所知,C#也非常流行。如果你想要大规模吸引程序员,从流行的语言开始是有意义的,即使这有点乏味。

实际上并没有什么技术要求限制它。我们可以编写一个完整的Ruby堆栈,并让程序员用C重新实现那些缓慢的部分,这不会是一个很大的问题。这对于任何正在制作移动操作系统的公司来说都是一项投资,但最终我不确定他们能从中获得多少收益。

最后,这只是移动设备的起步阶段。5年后,我不会感到惊讶,看到更广泛的移动堆栈。


2
与问题前提相反:第一批主流移动设备之一是Newton,它设计使用一种称为NewtonScript的专业动态语言进行应用程序开发。Newton开发环境和语言使应用程序特别容易协同工作和共享信息 - 几乎是当前iPhone体验的完全相反。虽然许多从头开始编写新的Newton应用程序的开发人员非常喜欢它 - NewtonScript“感觉”很像Ruby - 但Newton存在一些性能问题,并且即使在Apple后来添加了将C代码合并到NewtonScript程序中的功能之后,现有代码的移植也不容易。此外,在Newton上保护自己的知识产权非常困难 - 其他开发人员在大多数情况下可以查看您的代码甚至随意覆盖其中的某些部分 - 这是安全噩梦。 Newton是一个商业失败。 Palm采纳了苹果的一些最佳想法 - 并对其进行了改进 - 但作为整体简化的一部分放弃了动态语言支持,最终导致PalmOS获得了大多数移动市场份额(多年来),因为独立移动软件开发人员涌向了这个新平台。
有很多原因导致了牛顿电子助理的失败,但其中一些可能要归咎于NewtonScript。苹果公司在iPhone上正在“思考不同”,其中一个早期决定似乎是尽可能利用他们现有的核心开发者群体,并使人们可以轻松地使用Objective C进行开发。如果iPhone得到动态语言的官方支持,那将是在经过长时间和仔细的考虑后做出的晚期添加,以便在提供安全和高性能平台的同时,最好地实现它。然后,5分钟之后,其他人也会跟进。 :-)

1
NewtonScript 在当时的手持设备上需要大量资源(CPU 和内存),但其性能是完全可以接受的。最终,MessagePad 2100 售价近1000美元,采用了 >100MHz StrongARM 处理器和4MB RAM,而 Palm Pilot 则更便宜,只需 <1MB RAM,配备较慢的 68K 派生处理器。在当前主流语言中,NewtonScript 最接近 JavaScript,它们都是基于原型的。Danger/Android 平台可能是今天最接近这种理想的平台,因为它们的 Java VM 都在主机端执行预处理步骤,并且相对简单。 - Nicholas Riley
2
实际上,NewtonScript是苹果牛顿项目的第二种语言:第一种语言更加动态,名为Dylan(可能是动态语言的双关语),使用Macintosh Common Lisp实现。该项目被取消,换成了性能更好的东西。(作为程序员,我喜欢牛顿,但即使我也不得不承认对于用户来说它太慢了。)时间会告诉我们,苹果的竞争对手是否正在重蹈苹果的覆辙。 - Flash Sheridan
1
NewtonScript的一个特性是差异继承,它使得这种非常动态的面向对象编程语言(也可以编译成字节码)在内存要求非常低的情况下运行。这意味着子/相关对象只需要存储与父/相关对象不同的数据。当然,实现这一点的搜索导致了一些性能问题。io,NewtonScript的近亲,也实现了差异继承。 - morgant

2
移动设备上多种语言的情况比问题暗示的要好。现在即使是相当便宜的手机也支持Java(以其J2ME形式)。Symbian S60正式支持Python和JavaScript来开发小部件,还有Ruby的端口,尽管仍然相当实验性。Charles Nutter已经尝试将JRuby运行于Android上。Rhomobile声称允许用Ruby开发一款应用程序,然后在所有主要智能手机操作系统上运行,但这种可移植性声明意味着这些应用程序可以实现的功能受到限制。
"重要的是要区分移动操作系统(负责共享和保护资源)和运行时平台(提供工作环境和一组API来支持用户编写的应用程序)。一个操作系统可以支持多个运行时平台,就像在Windows中可以同时运行C++和Java应用程序一样,尽管Windows本身是用C++编写的。
不同的运行时平台将具有不同的性能特征,并以更大或更小的程度暴露操作系统和硬件的功能。例如,J2ME可用于大量设备上,但在许多设备上,J2ME运行时不提供访问相机或拨打电话的能力。"本地"运行时平台(即应用程序与操作系统使用相同语言编写的平台)在这方面也没有什么不同:"本地"应用程序的功能取决于运行时平台允许的内容。"

1

越狱的iPhone可以安装Python,我实际上经常在我的手机上使用Python。


1

我认为性能问题可能是其中的一部分原因,但并非全部原因。移动设备配备的硬件不是非常强大。

不过,我对此有些不确定。


1

最紧迫的问题之一是垃圾回收。垃圾回收经常会在嵌入式机器中引入不可预测的暂停,有时需要实时性能。

这就是为什么有一个Java微版,它具有不同的垃圾收集器,可以减少暂停,但程序速度较慢。

引用计数垃圾收集器(如CPython中的垃圾收集器)也不太容易出现暂停,但当具有许多嵌套指针(如链接列表)的数据被删除时可能会出现问题。


但是iPhone通过使用保留计数让你管理自己的“垃圾”。你必须实际释放你的对象,否则会导致内存泄漏。 - Tacoman667
@Tacoman,这被称为引用计数。你正在手动执行它,但它被归类为同一件事情。 - Unknown

0

Rhomobile的开源Rhodes框架今天就提供了这个功能。全球首个为所有智能手机提供Ruby实现的框架。


0

我的Palm有一个Lua实现,可以让你创建合理的GUI界面,还有一个相当无用的旧版Python 1.5,以及一个绝妙的Forth(可以生成编译应用程序),还有一个Scheme,可以完全进行GUI开发。

在最近的苹果WWDC 2009上,塞班联盟在隔壁楼举办了一场活动,第一天提供免费Nokia 5800智能手机给所有前来参加午餐营销推广的人-价值350美元。该活动是为了推广Ovi Store的开发,并邀请了开发者参与下午的编程竞赛。

他们强调用于Symbian开发的三种语言是Java、Flash(lite)和Python。Python是唯一一种可以让你在设备或PC上工作并包含OpenGL ES和其他手机功能示例的选项。

通过一个将Python应用程序打包成独立应用并可托管在商店的实用程序,我认为S60上的Python是竞争严肃动态语言的有力候选人(仍然是主导平台)。


0

有一个针对OpenMoko Freerunner的Linux发行版叫做SHR。它的大部分设置和框架代码都是用Python编写的,但是...它并不是很快。虽然还能接受,但从一开始就计划重写为Vala。

另一方面,我的几个小应用程序运行得足够快(唯一的缺点是启动时间较长),可以考虑使用Python开发用户应用程序。

记录一下:Freerunner拥有ARM-something 400MHz和128MB RAM。我猜想,一旦移动设备超过1GHz,像Python这样的语言也将足够快以处理中级任务(低级任务是内核)。


0
我认为基本原因是安全性和可靠性的结合。您不希望有人轻易地入侵手机,而且您希望对所安装的内容有一定的控制权。

可以删除Python标准库并创建一个安全可靠的子集。 - Francis
2
哦,别傻了。即使删除Python标准库,你仍然可以安装未经控制和未经测试的代码。 - Charlie Martin
那又怎样呢?如果你没有任何库来触及内核,你如何“黑掉手机”?如果你想要每个代码都经过测试和控制,那就由数字签名来管理,就像苹果所做的那样,所以这仍然与语言本身无关。 - Francis
通过针对解释器编写代码。如果您无法对手机功能产生任何影响,则解释器没有用处;如果可以,那么您可以加载不希望的不受信任的代码。这就是为什么 iPhone 等设备使用加密签名来确保加载的代码具有可信来源的原因。 - Charlie Martin
iPhone同时采用了数字签名以防止运行未经授权的应用,并使用一组有限的SDK来避免轻易破坏系统。再次强调,这不是关于语言的问题——例如,iPhone使用编译后的二进制文件而非解释器。 - Francis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接