5

我正在写一篇关于多平台编程的论文,我想包括关于优点/缺点的部分。据我了解;让任何应用程序成为多平台对于开发人员来说是一个巨大的卖点,因为它使几乎任何计算机用户都成为潜在的买家等等。我只是想找出可能的缺点。如果有的话?

4

8 回答 8

2

独立于平台的语言(在标题中询问)是否有缺点?

作为一个语言实现者,我不得不说,让一些东西在多个平台上运行是一项更多的工作。大多数额外的工作都在运行时系统中。制作独立于平台的东西更加困难。你必须坚持一些非常广泛使用的标准,比如 ANSI C。

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

于 2010-02-14T16:33:26.833 回答
2

“万事通,万事通”怎么样?

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

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

于 2010-02-14T16:34:15.800 回答
2

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

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

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

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

于 2010-02-14T16:37:46.447 回答
1

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

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

您可以编写directx代码..但为了在Linux中出现相同的结果......

于 2010-02-14T16:36:11.787 回答
0

主要缺点是:

  • 由于平台差异而需要额外的开发时间(例如不同平台上的文件系统访问不同)
  • 需要更多的测试,因此在多个受支持的平台上进行测试的费用也会更高。
于 2010-02-14T16:35:16.343 回答
0

很多时候,由于需要更大和更复杂的运行时,它会使语言功能不那么丰富,或者变慢。大多数语言都设法很好地实现了它,但是有一些语言可能没有从跨平台的实施中受益。

于 2010-02-14T16:37:12.157 回答
0

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

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

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

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

回到 1980 年代标准化的时候,包含对非常丰富的文件系统的本机支持似乎是合理的,但我已经有 10 多年没有见过 VAX(或任何其他具有版本化文件系统的系统)了。今天,大多数人并不关心它的复杂性。(我知道路径名和逻辑路径名在技术上是独立的功能,但它们在他们试图做的事情上并没有那么遥远。)

作为一名程序员,你永远无法猜测未来在哪个领域需要灵活性,甚至在哪个轴上需要灵活性——程序员很清楚这一点,这就是为什么像“敏捷”这样俗气的词变得普遍的原因。在设计独立于平台的语言时,您会遇到两全其美的问题:语言是抽象的,平台是非常具体的。果然,从 C 开始,每一种独立于平台的语言都充满了可观的烂摊子。

于 2010-02-14T17:33:38.187 回答
0

问孙。整个 Java 对公司的影响如何?(是的,我知道,样本 1 和所有)

在这种情况下,我是从供应商的角度来看的。他们制作了一种语言,虽然很流行,但对利用他们出售的操作系统的(实际!)功能没有任何作用。它必须在 Windows 上运行,而这一切都带来了严重的废话。您想分叉一个子进程并在父子进程之间打开一两个管道吗?太糟糕了。享受你的线程错误。享受您的狗慢速文件 I/O 的乐趣。(如果有的话,Java 何时最终包含了“nio”实现?)

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

于 2010-02-14T18:24:22.650 回答