源代码可以用任何语言编写,但最终 IDE(Eclipse、Visual Studio、Pycharm、DrScheme)将其翻译为计算机可以理解的相同二进制文件。
我说得对吗? 源代码最终被翻译成SAME二进制可执行文件?
我问的是代码编译的“流程”。
不完全正确。 首先,即使对于两个不同的“传统”编译器,生成的代码也不会相同,因为它们可能以不同的方式优化代码等。其次,某些语言不一定直接翻译成机器代码。
例如,Java 翻译为“字节码”——实际上并不存在的“虚拟机”的指令。 为了执行 Java 程序,指令必须由“字节码解释器”(模拟“虚拟机”的程序)“解释”。
此外,即使对于产生“真实”机器指令的常规编译器,输出格式也可能有几种不同的形式——不同类型的“对象模块”,它们可能无法与来自不同类型的“对象模块”“很好地配合”。编译器(尽管这在当前系统上主要是标准化的)。
不完全是。
首先是CPU架构和指令集的问题。每个 CPU 系列都有不同的操作码表和基本指令集,这意味着为 ARM CPU 生成的“平面”二进制文件将与为 x86 CPU 生成的二进制文件根本不同。
然后是文件格式的问题。不同的操作系统将其实际的(“平面”)二进制指令放置在不同的包中。 Windows 使用 Portable Executable 标准来打包其二进制文件,而 Linux 使用 ELF,OS X 使用 Mach-O。
最后,对于某些语言实现,根本不会生成本机指令。例如,基于 JVM 的语言使用 Java 字节码标准来表示虚拟机上与体系结构无关的操作。同样,Perl 和 Python 有自己的字节码标准,这些标准在运行时编译成然后解释。
总体而言,很难保证程序的编译将在多个系统中生成“完全相同”的相同二进制文件,即使这些系统共享架构也是如此。一般来说,最好考虑二进制文件的“效果”而不是其实际结构。只要编译器可靠且语言标准明确,无论其构造方式如何,生成的程序都应该表现相同。