一个C++编译器是为不同的平台(Linux,Windows等)多次编写的,这是真的吗?

Is it true that a C++ compiler is written multiple times for different platforms (Linux, windows etc)

本文关键字:是真的吗 Windows Linux 编译器 C++ 平台 一个      更新时间:2023-10-16

我所知C++是一个ISO标准,所以它们提供了某种标准和即将发布的版本要实现的功能列表。

是不是每个平台所有者都会去为这些标准编写自己的实现?

或者是否有任何核心编译器代码实现一次,然后所有其他平台都会围绕它编写包装器?

还是他们从头开始编写自己的C++编译器?

是和否。编译器基本上由两部分组成:解析器(又名前端(和代码生成器(又名后端(。解析器负责识别C++语法。代码生成器根据从解析器获得的信息为目标平台(硬件类型和操作系统(构建机器代码。虽然解析器与平台无关,但代码生成器部分绑定到目标平台。因此,为了支持新平台,可以重用现有的解析器部分,但必须编写新的代码生成器部分。

基本上,ISO标准集是编译器供应商应该遵循的一组规则。但这些是执行的标准,而不是实际执行的标准。

每个主要的硬件供应商都知道如何最好地使用自己的硬件这包括以下方面:1( ABI 支持 - 这包括二进制格式、系统调用和其他接口2( 共享库。3(架构支持。

因此,Microsoft IBM,英特尔,甲骨文和惠普都有自己的C++编译器,可以在其最新的硬件上创建最佳代码。

但是,标准确实提供了必须购买的草案https://isocpp.org/std/the-standard

下表提供了编译器对新功能C++的支持。其中包括C++11、C++14、C++17,以及后来接受的标准修订版,以及各种技术规范。

http://en.cppreference.com/w/cpp/compiler_support

可能一旦他们创建了特定于平台的地方,简单地说,Windows exe或com文件将无法在Linux上运行,但是更高版本可以通过旧版本进行编译。