7

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

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

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

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

  1. 您今天如何使用 C++11?
  2. 使用或不使用 C++0x 特性

我想指出,现在情况有所不同,因为我们谈论的是实际批准的标准。我相信了解它的采用率在编程实践中很重要。

4

2 回答 2

6

您可能应该首先决定您绝对希望能够使用哪个 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 分钟),所以如果你只想发布一个仅二进制的产品,那就继续吧。对于用户而言,这是另一回事,因此,如果您提供所有普通用户都需要编译的仅标头模板库,那应该会让您在转换速度上更加保守。

于 2013-08-22T09:44:58.830 回答
4

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

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

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

底线:询问项目的其他贡献者对采用新标准的看法,以及项目的用户社区。

于 2013-08-22T09:51:29.193 回答