一门语言具有平台无关性是否存在缺点?

5

我正在撰写一篇关于多平台编程的论文,希望包括有关优缺点的部分。据我了解,让任何应用程序都可以跨平台是开发者的一个巨大卖点,因为它使几乎任何计算机用户都成为潜在的购买者,除其他方面外。我只是想找出可能存在的缺点。是否存在?

8个回答

2
标题中问到一个语言(language)在跨平台方面是否有缺点?
作为一名语言实现者,我必须说,在多个平台上运行某个东西需要做的工作要多得多。大部分额外的工作都在运行时系统中。使某个东西跨平台更加困难;你必须坚持使用一些非常广泛使用的标准,比如 ANSI C。
我应该补充说明的是,你不一定需要编写大量代码;你只需要思考更多。Lua 是一个很好的跨平台语言示例,没有一个庞大的实现。 GHC 则相反:需要大量代码才能在许多平台上获得良好的性能——但仅运行时系统就比版本 6 Unix 大四倍!

2

“样样都会,样样不精”这个说法怎么样?

在一个平台上设计和实现的语言可以根据该平台进行定制。此外,资源通常是有限的,因此实现和调试都集中在一个平台上,而不是多个平台上。

这并不适用于社区努力,例如 Perl,其中资源非常丰富。


2
通常在多平台环境中,您需要在语言和机器之间增加一个额外的抽象层,例如解释器或JVM。这个额外的层告诉特定的机器如何在其环境中运行代码,并带来更多的代码,使您的计算机必须运行以处理给定的一组指令。因此,多平台应用程序通常较慢。
这背后的逻辑是,不是为每个环境编写相同的应用程序,而是为程序员创建一种接口。每个平台都需要自己的接口实现,但旨在以统一方式运行代码。
此外,虽然该层旨在提供多平台的通用行为,但您仍可能需要考虑从一个平台到另一个平台的命名约定和文件存储的差异。
Web浏览器是最广泛的例子。如果您有一个好的浏览器,它会解释Web标准代码(HTML/CSS/JS等),并负责如何在您特定的平台上显示它,而不需要代码编写者适应这些差异。

2
他是在问环境还是编程语言吗?我会说最广泛的跨平台编程语言是C,在C中,抽象层通常不是瓶颈。 - Ken

1

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

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

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


0

主要的缺点包括:

  • 由于平台差异(例如,不同平台上的文件系统访问不同),需要额外的开发时间。
  • 需要进行更多的测试,因此在多个支持的平台上进行测试的成本更高。

0

这往往会使语言的功能更少,或者由于需要更大更复杂的运行时而变得更慢。大多数语言都能够很好地处理它,但有一些语言可能没有从跨平台实现中受益。


0

问问Sun公司,Java对他们的公司有什么影响?(是啊,我知道只有一个样本)

从供应商的角度来看,他们开发了一种语言,虽然很受欢迎,但并没有利用他们销售的操作系统的(实际!)能力。它必须在Windows上运行,并带有所有这些限制性的无聊问题。你想要分叉一个子进程并在父进程和子进程之间打开一两个管道吗?太糟糕了。祝你好运处理线程错误。祝你好运处理狗慢的文件I/O。(Java何时终于包含“nio”实现?)

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


0

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

在某些方面,他们做得非常正确:有些东西从理论角度看似乎很奇怪,但却使现代非专用处理器能够快速实现它。例如,有一些荒谬的算术表达式可以返回垃圾而不是发出错误信号,因为这样更有效率。

在其他方面,他们试图实现平台无关性,但只增加了复杂性而没有获得多少好处。一个经典的例子是路径名子系统;make-pathname函数签名如下:

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

回到20世纪80年代,当标准化的时候,包括原生支持非常丰富的文件系统似乎是合理的,但在过去10年里,我没有看到过VAX(或任何其他带有版本化文件系统的系统)。如今,这是大多数人不关心的复杂性。(我知道路径名和逻辑路径名在技术上是不同的功能,但它们在尝试做什么方面并不远离。)

作为一名程序员,你永远无法猜测未来需要灵活性的领域,甚至不知道你想要灵活性的轴线是什么 - 程序员深知这一点,这就是为什么“敏捷”之类的庸俗词语变得普遍的原因。在设计一个平台无关的语言时,你正在处理最糟糕的两个世界:语言用于抽象,而平台则非常具体。毫无疑问,每种平台无关的语言都充满了相当数量的问题,从C到更高级别。


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