是否应将项目迁移到 C++11

Should you migrate a project to C++11?

本文关键字:C++11 迁移 项目 是否      更新时间:2023-10-16

我一直在尝试让我们的团队将一个大型C++项目从VS2008迁移到VS2012。我想这样做主要是因为我想开始使用 C++11,而且 IDE 要好得多。所以我的理由有些自私。

我的团队负责人正在反击,因为他没有看到迁移的业务案例,理由是我们已经通过 BOOST 和其他库提供的 C++11 将获得大多数性能改进功能。他还说,这将需要更改我们所有平台上的运行时,这可能会改变某些行为。这意味着我们需要在已部署到的所有服务器上重新测试。

第一个论点我有点理解,尽管我相信 C++11 代码会比使用 BOOST 干净得多(同样不是一个很好的商业案例)。

关于使用不同运行时的论点我不明白。本机C++应用程序使用哪些运行时?这不是VC++。他担心的是STL不会是完全相同的实现吗?

我不明白会有什么问题。我错过了什么吗?我应该引用其他好的移民论据来帮助我的案件吗?

  • 所有第三方库都需要使用新的编译器构建
  • 代码当前可能在不知不觉中依赖于未定义的行为,新的编译器可能会为 UB 做一些与当前编译器完全不同的事情(并导致问题)

性能不会有太大变化,因为您不会以 C++11 风格编码(基本上,很多东西都是通过值传递的,而以前不会)。如果您的代码库有很多...

std::vector<Blah> func(std::vector<Asdf> v); // notice all the pass by value

。C++11 可能是一个很好的性能改进。但在C++98/03,你就是不会这样做。

您需要降低团队领导的进入门槛。自己进行迁移并对您的产品进行冒烟测试。然后给他看。之后,以下是升级的抽象原因:

  • C++11 风格代码更少,更简单
  • VS2012 添加了 C++11 标准库 - 您可以停止手动滚动 50 个漏洞百出的替换
  • 程序员希望使用现代语言和现代工具工作。这将引发全公司学习和最佳实践的复兴,从而提高代码质量、员工保留率、员工继续教育等
  • 何时进行这种升级是一个微妙的平衡。如果你经常这样做,你就是在花钱而没有获得任何商业优势。如果你太不经常这样做,你就会处理太多的遗留技术和遗留代码,以至于维护可能会成为一场噩梦。当一个重大的语言变化到来时,你最终会转向,最好早点做(顺便说一句,这不是特别) - 否则你只会不断积累后来被认为是遗留代码的东西。为新工具迁移到新的编译器通常是不值得的。为重要的语言升级而移动通常是值得的。
这些

是否对你的团队领导有吸引力,我无法理解。不过祝你好运

VS2012 去年是如此,已经过时了,这么好Microsoft仅在使用一年后就取代了它,批评,令人眼花缭乱的白度,以及所有大写字母!

但是考虑到您可以在较新的 IDE 中构建 VS2008 项目,这意味着您现在可以升级到 VS2013,并随着时间的推移将项目升级到 VS2013 工具。

不过,您的TL是正确的,升级需要完全重新测试,但是如果您在添加功能之间有时间,则可以进行如此大的测试。

我想说升级的主要方面只是为了保持最新状态,今天没什么大不了的,但再过 5 年,您的旧 VS2008 版本可能会开始阻碍您(因为我知道最近将 VS2002 项目升级到 2010 年),离开它的时间越长,落后这么远从来都不是一个好主意, 您最终必须完成的升级工作量就越大。这就是这样做的真正原因 - Microsoft在下一个版本中不支持2008版本,并且较旧的IDE无法在Windows 9上运行的可能性每年都在增加。最好在有时间的时候解决这个问题。

我想我不会对性能改进抱有太多期望,但关于测试,我建议对任何类型的编译器或工具链更改进行全面重新测试,无论您是否更改代码。

编辑:我要补充一点,我会在下一个发布周期中推动移动到更新的编译器......这将删除测试参数(因为无论如何您都需要测试)。