我们今天是否没有足够的编译器(用于各种平台)?例如 Python - 它被认为是一种跨平台语言。
答案1
有很多这样的代码。每天你都会使用几十个需要这样的代码的网站。虽然现在它们大多是用 JavaScript 编写的,有时也用 Flash 的 ActionScript 编写,但总体思路是一样的。
(请记住,Java 的主要用途之一是网站中的小程序 - 类似于后来的 Flash 和今天的 JavaScript。)
除了“PC 和移动设备”之外,还有更多架构。在过去二十年中,PC 使用了几十种不同的 CPU 架构,例如:68000,高性能计算机, x86, amd64, Alpha,超高速串行总线,手臂ARM64 – 这就是受欢迎的那些。
因此这就产生了问题分发已编译的程序。
使用本机代码,每一个这样的网站的所有者必须分发同一程序的许多不同版本——每个 CPU 架构一个版本(记住,不只是两个),甚至每个 OS × CPU 组合一个版本(因为不同的操作系统在同一个 CPU 上有不同的服务、不同的 API、不同的调用约定)。
(即使在同一架构中,许多为 Intel i686 编译的程序也无法在 i486 上运行,尽管从技术上讲,i486 是相同的 x86,只是具有不同的特性。例如,Debian Linux 为 i486 编译了所有内容,因此它不会使用任何现代 CPU 特性,这意味着程序可能会慢一点。另一方面,Arch Linux 是为 i686 编译的,因此它根本无法在旧的 i486 CPU 上运行。)
使用字节码,Sun/Oracle 可以为所有架构分发 JVM,网站管理员不需要做任何其他事情——他们只需要一每个人都可以使用 .jar 文件。