为什么其他语言而不是java不是独立于平台的?

为什么其他语言而不是java不是独立于平台的?,java,jvm,programming-languages,platform-independent,Java,Jvm,Programming Languages,Platform Independent,我们称java为平台独立,因为java有一个虚拟机JVM,它可以在任何平台上独立执行字节码 但是JVM必须安装或驻留在该系统上 现在,为什么人们不为其他现有语言创建类似JVM的虚拟机,并将这些语言称为平台无关语言呢?我可以想到几个原因: 很长 这需要时间。您基本上创建了两种编程语言—高级语言和中间语言字节码。这意味着要考虑2种设计,编写编译器、lexer、linker和所有附带的工具。没有人保证它会受到欢迎,特别是因为它必须与成熟的Java、C等进行比较。然后,您必须为每个操作系统、每个文件系统

我们称java为平台独立,因为java有一个虚拟机JVM,它可以在任何平台上独立执行字节码

但是JVM必须安装或驻留在该系统上


现在,为什么人们不为其他现有语言创建类似JVM的虚拟机,并将这些语言称为平台无关语言呢?

我可以想到几个原因:

很长

这需要时间。您基本上创建了两种编程语言—高级语言和中间语言字节码。这意味着要考虑2种设计,编写编译器、lexer、linker和所有附带的工具。没有人保证它会受到欢迎,特别是因为它必须与成熟的Java、C等进行比较。然后,您必须为每个操作系统、每个文件系统和每个类似的变量依赖项编写代码—不是字面上的,而是越多越好。即使Oracle也做得不完美,只要看看I/O,我记得我想了很长一段时间,在发现FilerenameTo极其不可靠之前,我到底做错了什么

你需要取得非常好的表现

也就是说,您必须在执行代码时编译和优化代码,而用户不会注意到。就像第一次把它编译成字节码是不够的。这不是你能在一夜之间完成的事情。同样,你必须击败JVM、.NET、ART和更多已经存在的东西

尽管如此,仍然有许多虚拟机,而且可能还有更多的虚拟机正在制造中。编译成已经制作好的VM的字节码也比较容易,因此您可以使用Jython,它与JVM一起工作,但它的高级部分实际上与Python非常相似

我会补充更多,因为我记得


编辑:为了澄清这一点,因为你似乎混淆了一些术语:你不需要虚拟机来制作独立于平台的应用程序,你可以为每个操作系统编译它们,等等,而且不是每个虚拟机都能在每个操作系统上工作。GNET只在Windows上工作。

我可以想到几个原因:

很长

这需要时间。您基本上创建了两种编程语言—高级语言和中间语言字节码。这意味着要考虑2种设计,编写编译器、lexer、linker和所有附带的工具。没有人保证它会受到欢迎,特别是因为它必须与成熟的Java、C等进行比较。然后,您必须为每个操作系统、每个文件系统和每个类似的变量依赖项编写代码—不是字面上的,而是越多越好。即使Oracle也做得不完美,只要看看I/O,我记得我想了很长一段时间,在发现FilerenameTo极其不可靠之前,我到底做错了什么

你需要取得非常好的表现

也就是说,您必须在执行代码时编译和优化代码,而用户不会注意到。就像第一次把它编译成字节码是不够的。这不是你能在一夜之间完成的事情。同样,你必须击败JVM、.NET、ART和更多已经存在的东西

尽管如此,仍然有许多虚拟机,而且可能还有更多的虚拟机正在制造中。编译成已经制作好的VM的字节码也比较容易,因此您可以使用Jython,它与JVM一起工作,但它的高级部分实际上与Python非常相似

我会补充更多,因为我记得


编辑:为了澄清这一点,因为你似乎混淆了一些术语:你不需要虚拟机来制作独立于平台的应用程序,你可以为每个操作系统编译它们,等等,而且不是每个虚拟机都能在每个操作系统上工作。GNET仅在Windows上工作。

平台独立性与拥有虚拟机没有直接关系。独立于平台的开发意味着您开发的软件可以在多个平台上运行。这也可以用C或C++实现,例如当使用多平台库作为QT或Boost,无论你的目的是什么。必须提到,C和C++不在虚拟机中运行。其他语言(如Java)和.Net语言(如C)被翻译成字节码并在虚拟机中运行。要在不同的平台上运行字节码,您需要一个用于这些平台的VM。因此,必须为每个特定平台开发虚拟机


而且,你不能简单地为C创建一个虚拟机,它不能在VM中运行。您有两种语言:直接运行的语言和在VM中运行的语言。您可以用这两种语言开发独立于平台的软件。简而言之:平台无关性并不直接与虚拟机相关,但当然不是为每个平台编译一次代码,虚拟机只需要一次编译,并允许在所有拥有该虚拟机的平台上直接执行,因此,拥有虚拟机使事情变得更容易。

平台独立性与拥有虚拟机没有直接关系。小块地 表单独立开发意味着您开发的软件可以在多个平台上运行。这也可以用C或C++实现,例如当使用多平台库作为QT或Boost,无论你的目的是什么。必须提到,C和C++不在虚拟机中运行。其他语言(如Java)和.Net语言(如C)被翻译成字节码并在虚拟机中运行。要在不同的平台上运行字节码,您需要一个用于这些平台的VM。因此,必须为每个特定平台开发虚拟机


而且,你不能简单地为C创建一个虚拟机,它不能在VM中运行。您有两种语言:直接运行的语言和在VM中运行的语言。您可以用这两种语言开发独立于平台的软件。简而言之:平台无关性并不直接与虚拟机相关,但当然不是为每个平台编译一次代码,虚拟机只需要一次编译,并允许在所有拥有该虚拟机的平台上直接执行,因此,拥有虚拟机会让事情变得更简单。

大多数常见语言都在虚拟机或解释器中运行,因此它们与平台无关,包括Python、Ruby、Javascript等。直接编译成机器的几种语言是更成熟的编译语言,如古老的C和C++。p>

就像通常情况下,用C或C++,虚拟机在实践中通常比较慢,特别是当与编译的代码相比,它是为运行的特定系统高度优化的。有关这方面的更多详细信息,请参见此。

大多数常见语言都在虚拟机或解释器中运行,因此它们与平台无关,包括Python、Ruby、Javascript等。直接编译成机器的几种语言是更成熟的编译语言,如古老的C和C++。p>

就像通常情况下,用C或C++,虚拟机在实践中通常比较慢,特别是当与编译的代码相比,它是为运行的特定系统高度优化的。有关这方面的更多详细信息,请参见此。

这不是一夜之间就会发生的事情。有很多与平台无关的语言。我在1976年使用虚拟机,当时它们并不新鲜。为什么我的问题被否决了?这就是为什么我是stackoverflow的新生,声誉1,对吗?如果已经有两种伟大的语言可以与虚拟机协同工作,人们为什么还要创建另一种类似Java和C的语言呢。这是没有理由的。我不能代表其他任何人发言,但我投了反对票,因为这是基于事实错误,正如我之前的评论所指出的。自20世纪60年代以来,虚拟机就已经出现了,我个人在想到Java之前已经工作了十几年。这不是一夜之间就会发生的事情。有很多与平台无关的语言。我在1976年使用虚拟机,当时它们并不新鲜。为什么我的问题被否决了?这就是为什么我是stackoverflow的新生,声誉1,对吗?如果已经有两种伟大的语言可以与虚拟机协同工作,人们为什么还要创建另一种类似Java和C的语言呢。这是没有理由的。我不能代表其他任何人发言,但我投了反对票,因为这是基于事实错误,正如我之前的评论所指出的。自20世纪60年代以来,虚拟机就已经出现了,而我个人在Java出现之前的十几年里就已经在开发虚拟机了。在20世纪60年代,虚拟机是一门“固化的科学”,今天仍然有一些产品是基于20世纪60年代设计的虚拟机运行的。我想你是对的。Smalltalk和Prolog都在虚拟机上运行。我将删除第一点,以免误导读者。胡说八道。在20世纪60年代,虚拟机是一门“固化的科学”,今天仍然有一些产品是基于20世纪60年代设计的虚拟机运行的。我想你是对的。Smalltalk和Prolog都在虚拟机上运行。我将删除第一点,以免误导读者。