10

我想知道为什么不编写智能手机/移动设备操作系统以允许选择动态语言?iPhone 使用 Objective-C,Google Android 使用 Java,Windows Mobile 使用任何形式的 .NET 语言。

使用 Python、Ruby 或任何其他动态语言编写的移动操作系统背后的原因是什么?我知道在低级别他们不会削减它,但 C 或 C++ 会很好,例如 Python 可能是与之交互的顶层。我的意思是,有 Jython 或 CPython。

我只是想知道为什么我们在当今的移动操作系统中看不到更多的动态语言支持。

4

13 回答 13

14

总的来说,就是所有这些。内存、速度,以及可能最重要的程序员熟悉度。苹果在 Objective C 上投入巨大,Java 基本人人皆知,C# 也很流行。如果您正在尝试吸引大众程序员,那么从流行的东西开始是有意义的,即使它有点无聊。

实际上没有任何技术要求阻止它。我们可以编写一个完整的 Ruby 堆栈,让程序员在 C 中重新实现慢速位,这没什么大不了的。对于任何正在开发移动操作系统的公司来说,这都是一项投资,最终我不确定他们会从中获得多少收益。

最后,它是移动设备的开端。5 年后,看到更广泛的移动堆栈,我一点也不感到惊讶。

于 2009-05-03T03:26:56.573 回答
2

与问题的前提相反:最早的主流移动设备之一是Newton,它被设计为使用一种称为NewtonScript的专用动态语言用于应用程序开发。Newton 开发环境和语言使得应用程序协同工作和共享信息变得特别容易——这几乎与当前的 iPhone 体验截然相反。尽管许多从头开始编写新的 Newton 应用程序的开发人员非常喜欢它——NewtonScript“感觉”很像 Ruby——但 Newton 存在一些性能问题并且移植现有代码并不容易,即使在 Apple 后来添加了将 C 代码合并到一个 NewtonScript 程序。此外,在 Newton 上保护自己的知识产权非常困难——其他开发人员在大多数情况下可以查看你的代码,甚至一时兴起覆盖其中的一部分——这是一场安全噩梦。

牛顿是商业上的失败。

Palm 采纳了 Apple 的一些最佳创意并对其进行了改进,但放弃了动态语言支持作为整体简化的一部分,最终导致 PalmOS 获得了大部分移动市场份额(多年来),因为独立移动软件开发商蜂拥而至。新平台。

Newton 失败的原因有很多,但有些可能会归咎于 NewtonScript。Apple 在 iPhone 上“思考不同”,他们似乎做出的早期决定之一是尽可能利用现有的核心开发人员基础,让人们更容易在 Objective C 中进行开发。如果 iPhone 正式上市对动态语言的支持,这将是在经过长时间和仔细考虑如何在提供安全和高性能平台的同时最好地做到这一点之后添加的。

在他们这样做 5 分钟后,其他人就会跟随。:-)

于 2009-05-03T15:54:28.087 回答
2

移动设备上多种语言的情况比问题所暗示的要好。如今,即使在相当便宜的手机中也可以使用 Java(在其 J2ME 中)。Symbian S60 正式支持PythonJavascript 的小部件,还有一个 Ruby 端口,虽然它仍然是相当实验性的。Charles Nutter 已经尝试让 JRuby 在 Android 上运行rhomobile声称允许在 Ruby 中开发一个应用程序,然后该应用程序将在所有主要的智能手机操作系统上运行,尽管这种可移植性声明意味着对这些应用程序可以实现的功能的限制。

区分移动操作系统(执行诸如共享和保护资源之类的操作系统工作)和运行时平台(为用户编写的应用程序提供工作环境和一组 API)是很重要的。一个操作系统可以支持多个运行时,例如如何在 Windows 中同时运行 C++ 和 Java 应用程序,即使 Windows 本身是用 C++ 编写的。

运行时将具有不同的性能特征,并或多或少地暴露操作系统和硬件的能力。例如,J2ME 可在大量设备上使用,但在许多设备上,J2ME 运行时不提供对摄像头的访问或进行调用的能力。“本机”运行时(即应用程序使用与操作系统相同的语言编写的运行时)在这方面没有什么不同:“本机”应用程序可以做什么取决于运行时允许什么。

于 2009-05-03T17:59:39.330 回答
1

越狱的 iPhone 可以安装 python,实际上我经常使用 python。

于 2009-05-03T03:15:14.917 回答
1

我认为性能问题可能是部分原因,但不是全部原因。移动设备没有非常强大的硬件可供使用。

不过,我对此部分不确定。

于 2009-05-03T03:17:37.953 回答
1

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

这就是为什么有一个 Java Micro Edition 有一个不同的垃圾收集器,它减少了暂停以换取更慢的程序。

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

于 2009-05-03T03:21:07.443 回答
0

webOS——Palm 的新操作系统,将在 Pre 上首次亮相——让您可以针对 JavaScript 中的 webkit 运行时编写应用程序。时间会证明它有多成功,但我怀疑它不会是第一个走这条路的。随着移动设备变得越来越强大,您会看到动态语言变得越来越流行。

于 2009-05-03T17:35:38.543 回答
0

Rhomobile 的开源Rhodes框架今天提供了这一功能。世界上第一个适用于所有智能手机的 Ruby 实现。

于 2009-10-02T22:08:35.963 回答
0

我怀疑基本原因是安全性和可靠性的结合。您不希望有人能够轻易破解手机,并且您希望对正在安装的内容有所控制。

于 2009-05-03T03:13:13.377 回答
0

记忆力也是一个重要因素。不幸的是,在 Python 中很容易吃掉内存。

于 2009-05-03T03:20:08.523 回答
0

有很多原因。其中:

  • 商业原因,例如软件锁定策略,
  • 效率:动态语言通常被认为更慢(在某些情况下确实更慢,或者至少限制了你可以做的优化量。在移动设备上,优化代码比在 PC 上更需要),并且倾向于使用更多内存,这对于内存有限且缓存很少的便携式设备来说是一个重要问题,
  • 保持开发简单:一个开箱即用支持 Python、Ruby 和 Java 的平台:
    • 意味着三次编写文档和提供支持的工作,
    • 将开发工作分为三部分;有用的材料需要更长的时间才能出现在网络上,并且在您的平台上使用与您相同的语言的开发人员较少,
    • 需要更多的设备存储空间来支持所有这些语言,
  • 需要说服管理层。我一直觉得 Java 的优点很容易向非技术观众解释。.Net 和 Obj-C 似乎也分别是 Microsoft 和 Apple 平台的一个非常自然的选择。
于 2009-05-03T03:33:22.297 回答
0

My Palm 有一个Lua 实现,可以让你做合理的 GUI,一个相当无用的旧 Python 1.5,一个极好的 Forth(它允许你生成编译的应用程序)和一个允许完成 GUI 开发的Scheme 。

在最近的 Apple WWDC 2009 上,Symbian 联盟第一天在相邻的建筑物中举办了一场活动,为每个人免费赠送诺基亚 5800 ,甚至只是为了营销宣传午餐- 一部 350 美元的手机。该活动是为Ovi 商店推销开发,他们在那里有开发人员,下午还有一场编程比赛。

他们强调用于 Symbian 开发的三种语言是 Java、Flash (lite) 和Python。Python 是允许您在设备或 PC上工作的唯一选项,并且包含具有 OpenGL ES 和其他电话功能的示例。

借助将 Python 应用程序捆绑到可以在商店中托管的独立应用程序的实用程序,我想说 S60 上的 Python 在(仍然)占主导地位的平台上是严肃动态语言的竞争者。

于 2009-07-02T23:59:40.030 回答
0

OpenMoko Freerunner 有一个名为 SHR 的 Linux 发行版。它的大部分设置和框架代码都是用 python 编写的,而且……嗯,它不是很快。这是可以忍受的,但从一开始就计划在 Vala 重写它。

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

记录一下:Freerunner 有 400MHz 的 ARM 和 128MB 的 RAM。我想一旦移动设备超过 1GHz,像 Python 这样的语言对于中级的东西也足够快(低级是内核)。

于 2009-07-03T00:12:49.350 回答