某种语言与平台无关有任何缺点吗?

时间:2010-02-14 16:27:38

标签: multiplatform platform-independent

我正在撰写一篇关于多平台编程的论文,我想列出有关优缺点的部分。从我的理解;任何应用程序都是多平台的,对于开发人员来说是一个巨大的卖点,因为它几乎可以使任何计算机用户成为潜在的应用程序。我只想弄清楚可能的缺点。如果有的话?

8 个答案:

答案 0 :(得分:2)

  

语言(标题中提出)是否存在与平台无关的缺点?

作为一个语言实现者,我不得不说在多个平台上运行的东西是很多更多的工作。大部分额外工作都在运行时系统中。制作与平台无关的东西更难;你必须坚持使用一些非常广泛使用的标准,如ANSI C.

我应该补充一点,你不一定要编写很多代码;你只需要更加努力思考。 Lua是平台无关语言的一个很好的例子,没有庞大的实现。 GHC恰恰相反:许多代码可以在许多平台上获得出色的性能 - 但仅运行时系统的大小是版本6 Unix的四倍!

答案 1 :(得分:2)

“所有行业的杰克,无人的主人”怎么样?

在一个平台上设计和实现一种语言,可以为这些平台量身定制设计。此外,资源通常是有限的,因此实现和调试都集中在一个而不是多个平台上。

这不适用于资源供应充足的社区工作,例如Perl。

答案 2 :(得分:2)

通常在多平台环境中,您需要在语言和机器之间进行额外的抽象级别,例如解释器或JVM。这个附加级别告诉特定的机器如何在其环境中运行代码,并带来更多代码,计算机必须运行这些代码来处理给定的指令集。因此,多平台应用程序通常较慢。

这背后的逻辑不是为每个环境多次编写相同的应用程序,而是为编程人员创建一个类型的接口。每个平台都需要自己的接口实现,但是要以统一的方式运行代码。

此外,虽然此层旨在在多个平台上提供通用行为,但您仍可能需要考虑从一个平台到另一个平台的命名约定和文件存储的差异。

Web浏览器是最常见的例子。如果您有一个好的浏览器,它会解释Web标准代码(HTML / CSS / JS等),并负责如何在您的特定平台上显示它,而不是代码编写器需要适应这些差异。

答案 3 :(得分:1)

主要缺点 - 您无法使用特定于平台的增强功能......

这是一个更哲学的问题 - 语言能力和编译能力之间的界限......

你可以编写directx代码..但是为了在Linux中发生相同的结果......

答案 4 :(得分:0)

主要缺点是:

  • 由于平台差异而产生的额外时间(例如,不同平台上的文件系统访问权限不同)
  • 需要进行更多测试,因此在多个支持的平台上进行测试需要更多费用。

答案 5 :(得分:0)

很多时候,由于需要更大,更复杂的运行时,语言功能更少,或者速度更慢。大多数语言设法都能很好地完成它,但是有一些语言可能无法从跨平台的实现中受益。

答案 6 :(得分:0)

Common Lisp就像是一个案例研究! : - )

在某些方面,他们非常正确:从理论角度看,有些事情似乎很奇怪,但却使现代非专业处理器能够快速实现。例如,有一些无意义的算术表达式被允许返回垃圾而不是发出错误信号,因为它可以更有效率。

在其他方面,他们试图独立于平台,它只是增加了复杂性而很少或根本没有增益。一个典型的例子是路径名子系统; make-pathname函数签名如下所示:

make-pathname &key host device directory name type version defaults case

早在20世纪80年代,当它被标准化时,包含对非常丰富的文件系统的本机支持似乎是合理的,但是我在10年多的时间里没有看过VAX(或任何其他具有版本化文件系统的系统)。今天,most people don't care about的复杂性。 (我知道路径名和逻辑路径名在技术上是独立的功能,但是他们尝试做的事情并不是那么遥远。)

作为一名程序员,你永远无法猜测未来你需要灵活性的领域,甚至是你需要灵活性的轴 - 程序员都知道这一点,这就是为什么像“敏捷”这样的俗气话语变得普遍。在设计独立于平台的语言时,您要处理两个世界中最糟糕的语言:语言用于抽象,平台非常具体。果然,每个平台独立的语言都充满了相当多的吮吸,从C开始。

答案 7 :(得分:0)

问太阳报。整个Java的事情是如何为公司解决的? (是的,我知道,1和所有的样本)

在这种情况下,我从供应商的角度来看待它。他们制作了一种语言,虽然很受欢迎,却没有利用他们销售的操作系统的(实际!)功能。它必须在Windows上运行,所有这些都是令人尴尬的废话。你想分叉一个子进程并在父和子之间打开一两个管道?太糟糕了。玩弄线程错误。与你的狗慢文件I / O玩得开心。 (如果有的话,Java最终是否包含“nio”实现?)

微软当然没有在.NET上犯这样的错误。他们专注于更好的语言功能,而不是在多个运行时实现上花费资源。