通过vcpkg和最新的MSVC编译器来使用Boost.Hana

[原文发表地址] https://blogs.msdn.microsoft.com/vcblog/2018/06/04/use-boost-hana-via-vcpkg-with-the-latest-msvc-compiler/

[原文作者] Bat-Ulzii Luvsanbat

[原文发表时间] 6/4/2018

概述

一如既往,我们依旧致力于改善MSVC编译器一致性的工作,我们希望启用更多的C ++库,并且今天我们把Boost.Hana引入了Visual C ++。 基于我们最近的C ++一致性进展,我们在vcpkg版本中应用了一些代码变通方案后,客户现在可以在VS2017 15.7 update中使用Boost.Hana了。 我们要感谢Boost.Hana的作者Louis Dionne与我们一起做出的努力和额外的支持。

怎么获取它?

  • 访问GitHub上的 vcpkg并阅读README.md中的介绍
  • 我们创建了一个新的Hana分支并将vcpkg指向了它
  • 在你构建vcpkg后,执行下面的命令来安装Hana:
    • vcpkg.exe install boost-hana
    • 在Windows上安装Boost的期间,您将看到此免责声明:“当前的MSVC版本无法编译Boost hana。 请使用来自boost 1.67的分支,它上面有替代的变通方案。“

背景

也许你已经看到了我们发布了一个关于最近的VS2017 update 的博客:C++一致性实施。截至2018年6月初,MSVC还一直因为一些bug而不能构建Boost.Hana的master分支。但我们在两年前就已经开始了这项工作,并且已修复了大约40个来自Boost.Hana的编译器bug。我们在constexpr中遇到了一些阻塞问题,因此我们暂时停止了这项工作,直到最近VS2017 15.7发布,我们在C ++ 14和C ++ 17 constexpr的一致性方面取得了足够的进展。

最近我们重新审视了这个工作的状态,大部分的constexpr阻塞问题已经在VS2017 15.7 update上修复了。然而编译器中的多个功能区域仍然存在未解决的问题,导致我们无法构建Boost.Hana。

虽然编译器仍有工作要做,但由于我们客户对此库的需求很大,所以我们在Boost.Hana中为剩余的编译器bug做了代码上的变通方案。 这是有必要的,因此我们可以对所有已知问题进行完整的测试。 我们现在已经将Boost.Hana的构建加入到了我们的日常测试中,以此来保证我们在开发编译器时没有引出回归问题,同时我们逐步实现与公共资源库的一对一奇偶校验。

在与Louis讨论这个问题后,我们一致同意在vcpkg中提供一个新的Boost.Hana版本来促进更多的Visual C ++社区用户使用该库。 新版本中包含我们之前确定的补丁,并且当我们修复剩余的bug时,我们将逐步更新vcpkg中的Boost.Hana版本,最终在bug修复后我们将删除它并将其替换为master。现在我想我们已经非常接近这个目标了,我们可以在vcpkg中包含当前的这些进展, 而不会影响依赖此库的新用户。

再次感谢Louis愿意接受关于Hana bug的报告并迅速解决它们,这大大加快了我们的进展。

代码变通方案

  • MSVC特定的代码变通方案有70处: 27处在库文件本身,20处在测试用例,23处在示例。
  • 这些变通方案都在独特的宏定义下,前缀为“BOOST_HANA_WORKAROUND_MSVC_”,并且每个问题都有来自我们内部数据库特定的bug ID。更多详细信息见这里
  • 下面是一些示例:

编译bug

  • VS2017 15.7 update里面还有25个活跃的bug。
  • 我们计划在VS2017 15.9 update中修复它们。

下一步…

  • 在接下来的VS2017 update中,我们将完全修复阻塞Hana库的上游版本的剩余MSVC bug。 在我们修复错误时,我们也将逐步更新相应的代码变通方案。
  • 我们将继续提供有关我们进展的最新状态。
  • 我们将确保在vcpkg中依赖此库的用户不会受到我们工作的影响。
  • Range-v3的进展如何?
    • 同样,我们正在跟踪编译器中的所有Range-v3 bug,并计划在接下来的Visual Studio 2017update中修复它们。