Multiplatform 独立于平台的语言有什么缺点吗?

Multiplatform 独立于平台的语言有什么缺点吗?,multiplatform,platform-independent,Multiplatform,Platform Independent,我正在写一篇关于多平台编程的论文,我想包括关于优缺点的部分。据我了解,;对于开发者来说,任何应用程序都是多平台的,这是一个巨大的卖点,因为它可以让几乎所有的计算机用户成为潜在的买家。我只是想找出可能的缺点。如果有的话 独立于平台的语言(标题中提到)是否有缺点 作为一个语言实现者,我不得不说,让某些东西在多个平台上运行需要做更多的工作。大部分额外工作都在运行时系统中。让平台独立变得更加困难;您必须遵守一些非常广泛使用的标准,如ANSI C 我应该补充一点,你不一定要写很多代码;你只需要再仔细想想。

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

独立于平台的语言(标题中提到)是否有缺点

作为一个语言实现者,我不得不说,让某些东西在多个平台上运行需要做更多的工作。大部分额外工作都在运行时系统中。让平台独立变得更加困难;您必须遵守一些非常广泛使用的标准,如ANSI C

我应该补充一点,你不一定要写很多代码;你只需要再仔细想想。是一个平台无关语言的好例子,没有大型实现。相反:在许多平台上有很多代码可以获得很好的性能,但单是运行时系统的大小就是Version6UNIX的四倍

“万事通,一事无成”怎么样

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


这不适用于资源丰富的社区工作,如Perl。

主要缺点是:

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

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

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


您可以编写directx代码。。但是为了在Linux中实现相同的结果…

它多次使语言的功能变得不丰富,或者由于需要更大、更复杂的运行时而变得更慢。大多数语言都能很好地实现这一点,但也有一些语言可能无法从跨平台的实现中获益。

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

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

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


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

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

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

在其他方面,他们试图独立于平台,这只是增加了复杂性,几乎没有或根本没有好处。一个典型的例子是路径名子系统;
生成路径名
函数签名如下所示:

make-pathname &key host device directory name type version defaults case
早在20世纪80年代,当它被标准化时,包含对非常丰富的文件系统的本机支持似乎是合理的,但我已经10多年没有看到过VAX(或任何其他具有版本化文件系统的系统)。今天,这是一种复杂性。(我知道路径名和逻辑路径名在技术上是独立的功能,但它们在尝试做什么方面并不遥远。)


作为一名程序员,你永远也猜不到你将来在哪个领域需要灵活性,甚至在哪个轴上需要灵活性——程序员很清楚这一点,这就是为什么像“敏捷”这样的俗语变得很常见的原因。在设计独立于平台的语言时,您要处理两个世界中最糟糕的一个:语言用于抽象,平台非常具体。诚然,从C语言开始,每一种独立于平台的语言都有相当多的缺点。

问问Sun。整个Java程序对公司来说是如何运作的?(是的,我知道,样本1和所有)

在这种情况下,我是从供应商的角度来看待它的。他们制作了一种语言,虽然很流行,但却丝毫没有利用他们销售的操作系统的(实际!)功能。它必须在窗户上运行,所有这些废话都会导致瘫痪。您想分叉一个子进程并打开父进程和子进程之间的一两个管道吗?太糟糕了。享受你的线程错误的乐趣。享受慢文件I/O带来的乐趣(Java最终是什么时候包含“nio”实现的?)


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

他是在问环境还是语言?我想说的是一个最普遍的例子