工具链支持C ++ 11标准

时间:2013-08-22 09:20:36

标签: c++ c++11

我目前正在将我对C ++的知识更新为新标准。它让我感觉自己像个小孩子才能拥有最棒的玩具:我想一直玩它但我不想因为它而失去我的朋友。

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

我知道gcc 4.8.1clang 3.3是完整的C ++ 11功能,但我不知道有多少人真正使用了最新的编译器。我知道大多数codemonkeys肯定会这样做,但是普通的开源用户呢?拍摄潜在用户并告诉他们更新编译器并不是一个真正的选择。

我知道这个问题可能因为与这些问题相似而受到批评/关闭:

  1. How are you using C++11 today?
  2. To use or not to use C++0x features
  3. 我想指出现在情况有所不同,因为我们正在谈论一个实际批准的标准。我认为,在编程实践中,了解其采用率非常重要。

2 个答案:

答案 0 :(得分:6)

您应该首先确定您绝对希望能够使用哪个C ++ 11,然后在要支持的平台上查找支持此功能的最低编译器版本。 Apache拥有a nice survey每个主要编译器(gcc,clang,visual c ++,intel等)的最早版本,它们支持各种C ++ 11特性。

根据我的经验,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所在的位置。

即使发行版没有正式支持最新版本,也有private package repositories(通常由同样的人保持正式包装)提供最前沿的版本。 LLVM项目甚至提供pre-built nightly SVN snapshots,以启用许多 C ++ 14功能(在-std=c++1y模式下)。对于gcc,没有夜间包装AFAIK。

关于强制开发人员升级编译器/发行版。我不认为这是一个大问题(但@ArneMertz关于首先咨询他们的观点,在这里非常好)。虚拟机安装起来轻而易举(端到端约45分钟),因此如果您只想发布二进制产品,那么请继续。对于另一个问题的用户,如果您提供所有常规用户需要编译的仅标题模板库,那么这应该会使您在转换过程中更加保守。

答案 1 :(得分:4)

我认为这是一个很难回答的问题,因为这是一个有点广泛的问题。您在询问“在公众中采用”,这完全取决于您如何定义。

我认为在大多数公司中采用新编译器的速度很慢,因为对于较大的项目来说,更改工具链的某些部分会带来一些成本和风险。对于规模较大且“年龄较大”的公司而言尤其如此。较小的初创公司通常更有可能接受新技术。

另一方面,开源项目通常由那些为了娱乐而编程并且热衷于采用新的有前途的东西的人组成。我相信你的许多贡献者会和你一样。如果不了解您的项目,就不能说您的用户社区如何采用新的编译器。有些项目和社区只是希望程序工作而不关心新的编译器,并且有些社区会希望你使用最新的技术,因为它更酷,更快,更好无论如何。

结论:向您的项目的其他贡献者询问如何考虑采用新标准以及项目的用户社区。