compiler-construction - 编译器是否特定于操作系统?

标签 compiler-construction operating-system specifications

我理解编译器的作用,因为它需要源代码并将其编译为计算机可以理解的机器代码。但是,我想知道一件事,那就是,该机器代码是否特定于每个不同的操作系统?是否有必要在 Mac、Windows 和 Linux 操作系统上为同一语言编写不同的编译器?如果答案是肯定的、否定的或介于两者之间,请详细说明。

最佳答案

这取决于。

生成机器指令的编译器是特定于机器(或体系结构)的:ARM 和 x86 具有不同的指令集,因此每个机器代码都会有很大不同,但它不一定依赖于操作系统(尽管它通常是,因为不同操作系统具有不同的调用约定等。)链接器组件几乎总是特定于操作系统的,因为这是为该操作系统创建可执行文件的原因。并非所有编译器系统都将编译器与链接器分开——如果它是一个程序,那么它将是特定于操作系统的。

但是,也有独立于操作系统/机器的编译器:最著名的是 Java(以及其他基于 JVM 的语言,例如 Scala 或 Groovy)。这是因为 Java 编译器为 JVM 生成字节码,并由 Java 运行时(特定于操作系统和处理器)执行。但是 Java 编译器(用 Java 编写)可以在任何机器上运行,并生成可以在任何机器上运行的代码。

关于compiler-construction - 编译器是否特定于操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53697891/

相关文章:

c++ - Qt 的 pragma 指令

delphi - Coco/R 可以将解析后的文件转换为字节码吗?

c - 操作系统如何识别文本文件的结尾?

python - 为什么 os.mkdir() 在显式调用时变慢?

Go 方法调用速记规范适用性

java - 通知 java 从哪里导入(lib)

linux - 什么是内存互锁?

oauth-2.0 - OAuth2 访问 token 中允许使用哪些字符?

PostgreSQL协议(protocol)数据表示格式规范?

c++ - 多行 DEFINE 指令?