为什么解释语言被认为更容易移植



Java通常被认为比其他语言(如编译语言)更具可移植性,因为可执行文件可以在任何带有JVM的平台上运行。但是用C编写的代码可以在任何有C编译器的平台上运行。

因此,天真地,有两种选择:为许多不同的平台制作许多不同的编译器,并通过网络传输源代码,比如小程序,它是在客户端编译的;或者使许多不同的虚拟机在许多不同的平台上运行并通过网络传输相同的可执行程序或小应用程序。

为什么后者更好?我可以看到服务器端编译是多么的可取,但我觉得它还有更多的东西。我可以理解,与许多平台的编译器相比,Sun Microsystems为许多平台创建JVM的工作量更少,但这肯定不是主要动机。

但是用C编写的代码可以在任何有C编译器的平台上运行。

不一样。你要么需要在那台机器上用特定的编译器编译它,要么需要一个能够交叉编译的编译器。不管怎样,你的工作量都会更大。

尽管如此,仍有一些C代码是非常可移植的。一个只计算基本算术的简单程序是非常可移植的,即使是在C中,如果你愿意将其编译到不同的平台上。

第二个重要的区别是平台。一旦您执行I/O或使用系统调用,您的代码就会变得特定于平台,因为您需要直接与主机系统接口。解释语言提供了一个统一的平台。如果我的程序在JVM上运行,那么无论哪个系统是JVM的主机,它都会在JVM上执行。如果我对主机操作系统使用"本机"调用,我必须为每个操作系统使用正确的调用——但对于Java,我的"操作系统"就是JVM。

顺便说一句,有所谓的"可移植"C/C++代码,但它也依赖于与JVM类似的概念。如果您使用Qt和在多个平台上提供统一API的类似库,那么您可以创建非常可移植的C/C++程序。

关于Java为什么被设计为可解释的,也许最权威的答案可以在1995年宣布Java语言的白皮书中找到:

1.2.3体系结构中性和可移植

Java技术旨在支持将部署到异构网络环境中的应用程序。在这样的环境中,应用程序必须能够在各种硬件架构上执行。在各种硬件平台中,应用程序必须在各种操作系统上执行,并与多种编程语言接口进行互操作。为了适应操作环境的多样性,Java Compiler TM产品生成字节码——一种与体系结构无关的中间格式,旨在将代码高效地传输到多个硬件和软件平台。Java技术的解释性质解决了二进制分布问题和版本问题;相同的Java编程语言字节码将在任何平台上运行。

体系结构中立性只是真正可移植系统的一部分。Java技术对基本语言的定义非常严格,使可移植性更上一层楼。Java技术把赌注放在地上,并指定其基本数据类型的大小和算术运算符的行为。您的程序在每个平台上都是一样的——硬件和软件体系结构之间没有数据类型不兼容。

1.2.5解释、线程和动态

Java解释器可以在解释器和运行时系统已移植到的任何机器上直接执行Java字节码。在解释平台(如基于Java技术的系统)中,程序的链接阶段是简单、增量和轻量级的。您可以从更快的开发周期中获益——与传统的重量级编译、链接和测试周期相比,原型设计、实验和快速开发是正常情况。

值得一提的是,Java API远远超出了C或C++的标准库。

请注意,这种观点有些过时了。虽然在很大程度上仍然准确,但对先验编译和运行时编译之间的权衡的现代理解可能包括执行时间统计提供的额外优化机会,并且可能避免使用"编译"一词;解释的";总的来说——至少如果我们对性能有点认真的话。

相关内容

  • 没有找到相关文章

最新更新