对C++11标准的工具链支持

Toolchain support for the C++11 standard

本文关键字:支持 工具 C++11 标准      更新时间:2023-10-16

我目前正在将C++知识更新到新标准。这让我觉得自己就像一个刚得到最棒玩具的小孩:我想一直玩它,但我不想因此失去我的朋友。

我参与了一些开源项目,其中一些新功能将非常有用,所以我非常热衷于使用它们。我的问题是有多少用户可以编译C++11代码,例如,公众对C++11完整编译器的采用率是多少?有人有相关信息吗?

我知道gcc 4.8.1和clang 3.3是C++11的完整功能,但我不知道有多少人真正使用最新的编译器。我知道大多数代码猴子肯定会这么做,但普通的开源用户呢?打潜在用户的脸并告诉他们更新编译器并不是一种真正的选择。

我知道这个问题可能会因为与以下问题类似而受到批评/关闭:

  1. 你今天是如何使用C++11的
  2. 使用或不使用C++0x功能

我想指出,现在情况有所不同,因为我们谈论的是一个实际批准的标准。我认为,了解其采用率在方案编制实践中很重要。

您可能应该首先决定您绝对希望能够使用哪个C++11,然后在您想要支持的平台上查找支持它的最低编译器版本。Apache对支持各种c++11功能的每个主要编译器(gcc、clang、visual c++、intel等)的最早版本进行了很好的调查

根据我的经验,gcc 4.7和Clang 3.2几乎是功能完整的(除了继承构造函数之类的东西,它们很有用,但不能改变游戏规则)。你可以使用gcc 4.6(但采用4.6.3版本以避免许多错误)或Clang 3.1获得许多有用的功能,这很好,因为gcc 4.6也是官方的Android NDK编译器(如果你想支持的话)。

如果您希望支持Linux,可以查看DistroWatch,在那里您可以看到每个发行版都安装了哪些gcc版本。例如,许多基于Ubuntu的流行发行版已经在gcc 4.7上运行了近一年,并将在下一个版本中升级到gcc 4.8.1(功能完整)。

在Windows上,Nuwen Distro当前正在运行MinGW 4.8.1(仅32位,无线程)。Visual C++无法胜任这项工作,需要一段时间(一年或更长时间?)才能达到gcc 4.8和Clang 3.3的水平。

即使发行版不正式支持最新版本,也有私有包存储库(通常由同样进行官方打包的人维护)提供了最前沿的功能。LLVM项目甚至提供预先构建的夜间SVN快照,这些快照可以启用C++14的许多功能(在-std=c++1y模式下)。对于gcc,没有夜间套餐AFAIK。

关于强制开发人员升级编译器/发行版。我不认为这有什么大不了的(但@ArneMertz关于首先咨询他们的观点在这里非常好)。虚拟机安装起来很简单(端到端大约45分钟),所以如果你只想发布一个纯二进制的产品,那就继续吧。对于用户来说,这是另一回事,因此,如果您提供了一个所有普通用户都需要编译的仅限标头的模板库,那么这将使您在过渡过程中更加保守。

我认为这是一个很难回答的问题,因为它是一个有点宽泛的问题。你问的是"大众收养",这在很大程度上取决于你如何定义它。

我想说,在大多数公司中,采用新编译器的速度很慢,因为对于较大的项目来说,更改工具链的部分会带来一些成本和风险。这一点尤其适用于更大和"更老"的公司。规模较小的创业公司往往更倾向于接受新技术。

另一方面,开源项目通常由那些为了好玩而编程的人组成,他们热衷于采用有前途的新事物。我相信你的许多贡献者也会和你有同样的感受。如果不进一步了解您的项目,就无法说明您的用户社区是如何采用新编译器的。有些项目和社区只希望程序运行,而不关心更新的编译器,有些社区会希望您使用可用的最新技术,因为它很酷、更快、更好。

一句话:询问项目的其他贡献者对采用新标准的想法,以及项目的用户社区。