对C++11标准的工具链支持
Toolchain support for the C++11 standard
我目前正在将C++知识更新到新标准。这让我觉得自己就像一个刚得到最棒玩具的小孩:我想一直玩它,但我不想因此失去我的朋友。
我参与了一些开源项目,其中一些新功能将非常有用,所以我非常热衷于使用它们。我的问题是有多少用户可以编译C++11代码,例如,公众对C++11完整编译器的采用率是多少?有人有相关信息吗?
我知道gcc 4.8.1和clang 3.3是C++11的完整功能,但我不知道有多少人真正使用最新的编译器。我知道大多数代码猴子肯定会这么做,但普通的开源用户呢?打潜在用户的脸并告诉他们更新编译器并不是一种真正的选择。
我知道这个问题可能会因为与以下问题类似而受到批评/关闭:
- 你今天是如何使用C++11的
- 使用或不使用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分钟),所以如果你只想发布一个纯二进制的产品,那就继续吧。对于用户来说,这是另一回事,因此,如果您提供了一个所有普通用户都需要编译的仅限标头的模板库,那么这将使您在过渡过程中更加保守。
我认为这是一个很难回答的问题,因为它是一个有点宽泛的问题。你问的是"大众收养",这在很大程度上取决于你如何定义它。
我想说,在大多数公司中,采用新编译器的速度很慢,因为对于较大的项目来说,更改工具链的部分会带来一些成本和风险。这一点尤其适用于更大和"更老"的公司。规模较小的创业公司往往更倾向于接受新技术。
另一方面,开源项目通常由那些为了好玩而编程的人组成,他们热衷于采用有前途的新事物。我相信你的许多贡献者也会和你有同样的感受。如果不进一步了解您的项目,就无法说明您的用户社区是如何采用新编译器的。有些项目和社区只希望程序运行,而不关心更新的编译器,有些社区会希望您使用可用的最新技术,因为它很酷、更快、更好。
一句话:询问项目的其他贡献者对采用新标准的想法,以及项目的用户社区。
- 编译时未启用intel oneApi CUDA支持
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 在clang++预处理器中确定gcc工具链版本
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- AWS CPP S3 开发工具包是否支持"传输加速"
- 具有C 代码生成和DOXYGEN支持的免费UML工具
- 是否有任何工具支持C++基于检查点的内存使用情况分析
- Mac 上的 Xcode 工具支持 c++11
- 对C++11标准的工具链支持
- IDE,框架,代码管理器工具,在一个项目中支持Java和C++的东西
- 在 Mac OS X 上创建对 Thunderbird "OmniFocus Clippings"支持:需要哪些工具和文档参考?
- 支持XNAWP7和闪存与现有的C++代码库-管道,工具和方法