我们称java为独立平台,因为java有一个虚拟机JVM,它可以在任何平台上独立执行字节码。
但必须在该系统上安装(或必须驻留)JVM。
现在,为什么没有人为其他现有语言创建像JVM这样的虚拟机,并将这些语言称为独立平台?
答案 0 :(得分:2)
Plattform独立性与拥有虚拟机没有直接关系。独立于平台的开发意味着您开发的软件可以在多个平台上运行。这也可以通过C或C ++实现,例如当使用多平台库作为QT或boost(无论您的目的是什么)时。必须提到的是,C和C ++不能在虚拟机中运行。其他语言(如Java)和.Net语言(如C#)将转换为字节码并在虚拟机中运行。要在不同平台上运行字节码,您需要为这些平台安装VM。因此,必须为每个特定平台开发虚拟机。
另外,你不能简单地为C创建虚拟机,它根本不被认为是在VM中运行。你有两种语言:那些直接运行的语言'以及在VM中运行的那些。您可以使用这两种语言开发独立于平台的软件。简而言之:平台独立并不直接与虚拟机相关(但当然不是为每个平台编译一次代码,而虚拟机只需要一次编译,而是允许在拥有此虚拟机的所有平台上直接执行,因此拥有虚拟机事情有点容易。)
答案 1 :(得分:0)
我可以想到几个原因:
它冗长
需要时间。您基本上创建了两种编程语言 - 高级语言和中间语言(字节码)。这意味着要考虑2种设计,编写编译器,词法分析器,链接器和所有附带的工具。没有人能保证它会受欢迎,特别是因为它必须与Java,C#等相同的成熟版本进行比较。然后,你必须为每个操作系统编码它,每个文件系统和每个类似的变量依赖(不是字面上,但越多越好)。即使是甲骨文也没有完美的工作,只要看I / O,我记得在发现File#renameTo非常不可靠之前,我一直想知道我做错了什么。
您需要取得非常好的表现
意思是,您必须在执行代码时编译和优化代码,而无需用户注意。就像第一次编译它(到字节码)一样不够。这不是你可以在一夜之间做的事情。而且你必须再次击败JVM,.NET,ART等等。
尽管如此,有很多虚拟机可能正在制作中。它也更容易编译成已经制作的VM的字节码,所以你有例如Jython与JVM一起使用,但它的高级部分实际上(非常类似)Python。
我记得会添加更多内容。
编辑:要清除这一点,因为您似乎在混淆条款:您不需要VM来制作与平台无关的应用程序(您可以为每个操作系统编译它们等等)并且并非每个VM都适用于每个操作系统(例如,.NET仅适用于Windows)。
答案 2 :(得分:0)
大多数常见语言都在虚拟机或解释器中运行,因此与平台无关,包括Python,Ruby,Javascript等。直接编译到机器的几种语言是更成熟的编译语言,例如古老的C和C ++。
通常情况下,使用C或C ++,虚拟机在实践中通常较慢,特别是与针对特定系统进行高度优化的编译代码相比,它被设计为可以运行。有关此问题的详细信息,请参阅此question。