我喜欢 C++,这已经不是什么秘密。我偏爱 C++ 的一个原因是,C++ 是一个“开放”的编程语言,任何人都可以使用自己喜欢的编译器。当然,C++ 编译器的种类也很多。同样, C++ IDE 也不少,我在之前的一个博客中讨论过这个话题。
编译和运行 C++ 代码的平台(或主机),通常称为托管环境。如果 C++ 程序在没有操作系统的帮助下执行,则属于运行在独立环境中。因为缺乏操作系统,独立环境的限制比较多。相应地,在这种环境下运行 C++ 代码的要求也不少,你可以点击链接查看具体要求。也许之后,我将为 C++ 独立环境写一篇专题博客。不过,今天的博客,主要介绍了我认为的一流的编译器工具。让我们一一了解一下。
托管环境中的最佳 C++ 编译器
Microsoft Visual C++ 编译器
这是微软与Visual Studio 捆绑的 C 和 C++ 编译器。与 Visual Studio 2019 16.10 版本捆绑在一起的编译器版本为 19.28.29914,这个编译器完全支持 C++17 核心语言功能,以及 C++17 代码库功能,部分支持 C++20 。预计Visual Studio 2022(目前还是预览版本)还将包括 Visual C++ 编译器,届时将完全支持 C++ 20 的功能。虽然 Visual C++ 编译器主要用于 Windows 开发,但使用 Windows 子系统进行 Linux(WSL)集成后,也可以用于开发本地 Linux 应用程序。点击查看精彩视频,了解关于这个话题的更多信息。
GNU 编译器集合
GNU 编译器集合 GCC,是目前最有名的开源工具,可以用来编译多种语言,不仅限于 C 或 C++。GCC 的最新版本 GCC 11 完全支持 C++17 核心语言功能,以及 C++17 代码库功能。除了模块中的一些次要功能外,它还突破性地支持几乎所有的 C++20 语言和库功能。值得关注的是,GCC 11 还包含了 C++ 23 标准初稿的一些功能,这是继 C++ 20 之后 C++ 标准的最新修订版本。
*了解更多 GCC 信息
Clang/LLVM
在最近的一篇博客中,我对 GCC vs Clang 进行了详细比较。我介绍了这个编译器的体系架构,并描述了 LLVM 后端如何简化优化编译器的过程。Clang/LLVM 12.0,是最新版本,目前完全支持 C++17,对 C++20 也提供了支持。当你阅读完这篇博客,你就会明白为什么许多 C++ 编译器想要将其代码放在这个开源平台上。
Intel C++ 编译器
我已经在使用 Intel C++ 编译器(准确来说,是 Intel® oneAPI DPC++/C++ 编译器),主要用于计算密集型应用。我发现这个编译器的性能非常优秀。与Visual Studio 不同,Visual Studio 中包括了用于桌面程序开发的MFC(微软基础类)基础架构,支持 Web 程序的WebVIEW2,Intel 编译器则支持线程构建模块(当前开源为 ONAPI),Data Parallel C++(DPC++),两者的目标明显不同。支持计算密集型应用编译是 Intel 编译器的亮点,这类编译一般需要支持数据并行(使用并行 STL)、现场可编程阵列(FPGA),图形处理单元(GPU)。Intel C++ 编译器的最新版本支持 C++ 17 标准。
IBM XLC++
IBMXLC++ 编译器支持 z/OS、Linux on Power、AIX 和 IBMi(与 PASE 一起)等平台。该编译器提供了先进的优化技术,用于开发复杂 C++ 程序的优质代码。最近,IBM 为 Power、AIX 和 IBMz 平台的 Clang/LLVM 项目编译了代码。去年(2020 年),IBM 宣布计划为其 IBMXLC++ 编译器工具链采用 Clang/LLVM 框架。这更有利于 IBM XLC++ 编译器支持最新的 C++ 标准。
独立环境中的最佳 C++ 编译器
Keil C++ 编译器
µ Vision 是 ARM 出品的基于 Windows 的软件开发平台,用于嵌入式程序开发,支持多种平台(有关Keil µ Vision支持的部分平台列表,请参见下图)。ARM 6 编译器以 Clang/LLVM 编译器工具链为基础,完全支持 C++ 14 标准。此外,该编译器还支持功能安全标准,如 IEC 61508 和 ISO 26262,用于开发功能安全应用程序。此编译器可以直接用于高安全性程序开发,支持使用Arm®TrustZone® 隔离系统中的重要安全组件。使用 Keil µVision C++ 编译器的典型程序包括能源计量、照明、工业网络、报警系统和电机控制。业余程序开发爱好者可免费使用 Keil µ Vision,但程序大小有一些限制。
德州仪器 C/ C++ 代码生成工具
最初的 TI Arm C/C++ 编译器工具(Arm-CGT-XX)是独立 C/C++ 编译器,目前处于维护阶段。为 Arm Cortex-M 和 Arm Cortex-R 设备编程的较新版本是 TI Arm Clang Compiler Tools (ARM-CGT-CLANG-X),是从开源 Clang/LLVM 编译器工具链派生的一个工具。德州仪器的 ARM Optimizing C/C++ Compiler v20 支持C++ 14 标准。
MPLAB XC++ 编译器
PIC 和 AVR 微控制器之前一直使用 C 语言编程,不过较新版本的硬件已经开始支持32位(以前是 8 位),并且可以用 C++ 进行编译。Microchip 的MPLAB XC++ 编译器设计以 GCC 为基础,支持 C++03 标准库和 C++03 标准。在收购 Atmel 后,Microchip 成为嵌入式控制方案的行业领导者,其 MPLAB X 开发环境可以在 Windows、Linux 和 OS X 中运行,并与 MPLAB XC++ 编译器绑定。
总结
C++ 语言正在迅速发展,许多编译器团队最近可能也有所察觉,跟上标准并不容易。不过,将编译器建立在一个成熟的开源框架上,比如 Clang/LLVM,是保证支持 C++ 最新功能的好办法。在这篇博客中,我列出了托管环境和独立环境中的主流编译器。尽管,编译器不完全属于独立或托管的 C++ 环境,例如,EDG ECP 属于C++ 前端,且主要由编译器使用,所以不包含在这个列表中。这个列表中也不包含将 C++ 代码转换成 Java script 的转换器,如 Emscripten。以及类似于MinGW的交叉编译器也不在此列表中。
备注:点击链接查看各种编译器对 C++ 标准的支持。
点击了解 Incredibuild 的 C++ 构建加速方案,并获取试用 License!