我正在撰写一篇关于多平台编程的论文,希望包括有关优缺点的部分。据我了解,让任何应用程序都可以跨平台是开发者的一个巨大卖点,因为它使几乎任何计算机用户都成为潜在的购买者,除其他方面外。我只是想找出可能存在的缺点。是否存在?
我正在撰写一篇关于多平台编程的论文,希望包括有关优缺点的部分。据我了解,让任何应用程序都可以跨平台是开发者的一个巨大卖点,因为它使几乎任何计算机用户都成为潜在的购买者,除其他方面外。我只是想找出可能存在的缺点。是否存在?
“样样都会,样样不精”这个说法怎么样?
在一个平台上设计和实现的语言可以根据该平台进行定制。此外,资源通常是有限的,因此实现和调试都集中在一个平台上,而不是多个平台上。
这并不适用于社区努力,例如 Perl,其中资源非常丰富。
主要缺点 - 无法使用特定于平台的增强功能...
这是一个更为哲学的问题 - 语言能力和编译器能力之间的界限在哪里...
你可以编写DirectX代码...但为了在Linux中产生相同的结果...
主要的缺点包括:
这往往会使语言的功能更少,或者由于需要更大更复杂的运行时而变得更慢。大多数语言都能够很好地处理它,但有一些语言可能没有从跨平台实现中受益。
问问Sun公司,Java对他们的公司有什么影响?(是啊,我知道只有一个样本)
从供应商的角度来看,他们开发了一种语言,虽然很受欢迎,但并没有利用他们销售的操作系统的(实际!)能力。它必须在Windows上运行,并带有所有这些限制性的无聊问题。你想要分叉一个子进程并在父进程和子进程之间打开一两个管道吗?太糟糕了。祝你好运处理线程错误。祝你好运处理狗慢的文件I/O。(Java何时终于包含“nio”实现?)
当然,微软在.NET方面没有犯这样的错误。他们专注于更好的语言特性,而不是花费资源在多个运行时实现上。
Common Lisp就像是一个案例研究! :-)
在某些方面,他们做得非常正确:有些东西从理论角度看似乎很奇怪,但却使现代非专用处理器能够快速实现它。例如,有一些荒谬的算术表达式可以返回垃圾而不是发出错误信号,因为这样更有效率。
在其他方面,他们试图实现平台无关性,但只增加了复杂性而没有获得多少好处。一个经典的例子是路径名子系统;make-pathname函数签名如下:
make-pathname &key host device directory name type version defaults case
回到20世纪80年代,当标准化的时候,包括原生支持非常丰富的文件系统似乎是合理的,但在过去10年里,我没有看到过VAX(或任何其他带有版本化文件系统的系统)。如今,这是大多数人不关心的复杂性。(我知道路径名和逻辑路径名在技术上是不同的功能,但它们在尝试做什么方面并不远离。)
作为一名程序员,你永远无法猜测未来需要灵活性的领域,甚至不知道你想要灵活性的轴线是什么 - 程序员深知这一点,这就是为什么“敏捷”之类的庸俗词语变得普遍的原因。在设计一个平台无关的语言时,你正在处理最糟糕的两个世界:语言用于抽象,而平台则非常具体。毫无疑问,每种平台无关的语言都充满了相当数量的问题,从C到更高级别。