一处编译处处运行如何实现?浅析语言的跨平台性
很多小伙伴们都很好奇,为什么 Java 可以一处编译,处处运行?这是 Java 特有的功能吗?接下来小编的这篇文章告诉你 Java 怎么实现一处编译处处运行。
C语言的编译运行方式
以 C 语言为例,我们要用 C 语言写一段程序,需要先用 C 语言写成 cpp 文件,然后使用编译器将其编译成可执行文件。可执行文件由二进制的机器码组成,但是不同机器的CPU不一样(决定了机器码的不同),系统也不一样(决定了可执行文件格式的不同),所以它们编译出来的二进制文件也是不一样的。比如 Windows 编译出来的是 obj,lib,dll,exe
这样的文件,而 Linux 编译出来的是 .o,.a,.so
这样的文件。它们之间并不能通用。所以一份源代码要在不同的电脑上运行需要重新编译才能得到对应的可执行文件。
Java的编译运行方式
Java 和 C 语言不同,开发者用 Java 写成 java 文件,使用 Java 编译器编译后可以得到 java 的 class 文件(这种文件又叫做 Java 字节码文件,字节码文件类似于机器码,但机器码直接在 CPU 上运行,而字节码在 Java 虚拟机上运行)。然后将 class 文件放在相应系统的虚拟机上进行运行。不同的电脑虽然操作系统不同,CPU 也不同,但是它们安装的 Java 虚拟机为 Java 代码提供了统一的接口。只要目标机器可以安装 Java 虚拟机,Java 的 class 文件就可以在目标机器上运行。
JavaScript等解释型语言的运行方式
JavaScript 与 Java 不同,Java 需要将源代码编译后再放进 Java 虚拟机运行,而 JavaScript 直接将源代码放进 JavaScript 解释器运行。这样的方式也让 JavaScript 的可移植性变得十分强大。不过因为 JavaScript 没有没有经历过编译,所以在运行 JavaScript 代码的时候解释器要承担额外的工作而导致效率变低。
小结
以 Java 为例,虽然不同平台有着各自的不同情况,但 Java 虚拟机的存在让 Java 最终运行的地方的情况相同,所以不需要分情况进行编译。不同平台的各种不同情况,只需要在 Java 虚拟机中进行处理即可。通俗的讲,Java 虚拟机在不同的机器上为 Java 字节码文件搭建了相同的舞台。
以上就是关于怎么实现一处编译处处运行的全部内容,更多技术类介绍文章尽请关注W3C技术头条。