我们很高兴地宣布,Visual Studio 2022 17.4版本正式可用。这篇文章,我将盘点一下那些对C++开发者相关的一些新功能。
Arm64
在17.3版本中,Visual Studio已经添加了对Arm64的原生支持。在之后的版本中,我们继续添加了对更多开发场景的支持,在最新的17.4版本中,Arm64原生工具链可以在生产环境中使用了。
在工作负载中,”Desktop development with C++”和”Game development with C++”已默认开启对Arm64的原生开发支持。
MSVC
在新版本中,我们花了很大一部分精力来改进编译器的诊断信息输出。诸如Concepts和Ranges等新的C++功能为更具表现力的代码和定义更好的 API 提供了机会。但是,为了充分利用它们,需要对工具进行更好的诊断,以便可以查明和解决代码约束失败问题。有关所有详细信息,请参阅 Xiang Fan 的博客文章,但下面是改进的快速示例,显示了有关重载解析失败的更完整信息,以及有关给定约束失败原因的信息:
17.3版本中的错误提示
17.4版本中的错误提示
作为这项工作的一部分,我们还添加了实验性支持,用于将编译器诊断输出为 SARIF。这可以通过实验标志 /experimental:log。
除了改进的诊断之外,我们还扩展了编译器的命名返回值优化 (NRVO) 功能。有关详细信息,请参阅Bran Hagger的博客文章。主要改进是为涉及异常处理或循环的情况启用 NRVO。例如,在 17.3 中,返回结果时的结果的复制/移动不会被省略,但现在将被省略。
CMake 和 跨平台开发
容器是打包运行应用程序的所有内容的好方法。通过 Dockerfile,可以捕获所有先决条件,以便在部署和运行容器的任何位置都有一致的运行时环境。开发容器扩展了此概念,以捕获在容器中开发和构建应用程序所需的一切。现在可以将开发容器用于 Visual Studio 中的C++项目。
使用连接管理器连接到远程系统现在支持 SSH 代理跳转,它用于通过另一个 SSH 主机访问 SSH 主机(例如,访问防火墙后面的主机)。
测试资源管理器用于公开 CTest 测试的内部前缀,使列表更难阅读和导航。我们对此进行了改进,将它们全部分组到一个标题下。以下是之前和之后:
其他工具
我们对某些工作负载中 Visual Studio 附带的其他工具也进行了一些更新。
如果你在 Arm64 计算机上使用 Visual Studio,你可以通过 Visual Studio 安装程序中的 CMake 组件获得 CMake 和 Ninja 的 Arm64 版本。
我们已将 CMake 版本更新到版本 3.24.1。此版本附带了许多新功能,包括用于删除 CMake 缓存的 –fresh CLI 标志、if 表达式中的路径比较以及 CMakePresets.json 版本 5。我们将在 Visual Studio 2022 的 17.5 版本中添加对 CMakePresets.json 版本 5 的支持,但 17.4 增加了对版本 4 的支持。请参阅 CMake 发行说明,了解所有新的好东西。
我们还将发布的 LLVM 版本更新到版本 15.0.1。有关可用内容,请参阅 LLVM 和 Clang 发行说明。
生产力
使用 “Create Declaration/Definition” 功能时,过去是新代码会在一个小窗口中打开,让你“窥视”。这现在是可配置的:可以选择扫视(默认)、打开文档或不导航。该设置位于“选项”>“文本编辑器”>“C/C++ > 高级>重构”下。
我们修复了 IntelliSense 和 MSBuild 之间预编译标头的一致性差距。过去,当通过 /Yu 使用 PCH 并通过 /FI 强制包含时,IntelliSense 始终会先处理它,然后再通过 /FI 包含任何其他标头。这与生成行为不匹配,因此通过此更改,/FI 标头将按指定的顺序进行处理。
IDE性能
我们还在继续改进 IDE 的性能。在此版本中,我们改进了打开新解决方案时的索引性能。大型项目可以从 17.3 提高 20-35%。
代码安全
我们使用“关键事件”信息丰富了一些代码分析警告,这些信息描述了分析结果是如何得出的。我们改进并扩展了此功能,将此信息添加到更多分析中,并为你提供在 Visual Studio 中可视化它的新方法。
例如,安装 SARIF 查看器扩展后,关键事件信息现在将用于直接注释源。
C++标准化
我们将继续跟踪C++标准化的最新发展。你可以在 吉特哈布 上的 Changelog 中看到最新和即将推出的 STL 功能,但以下是我最感兴趣的一些功能:> P0881R7> P1328R1 constexpr type_info::operator==()> P2440R1 ranges::iota, ranges::shift_left, ranges::shift_right> P2441R2 views::join_with> P2302R4 ranges::contains, ranges::contains_subrange
标准化工作也扩展到 IntelliSense,它现在支持 C23 属性,我们将继续改进对 C++20 模块的支持。
vcpkg
vcpkg 现在已经 6 岁了,拥有超过 2000 个开源库!
我们将继续向vcpkg本身和Visual Studio添加新功能,以改善集成。例如,vcpkg 工件是一项功能,允许你描述构建应用程序所需的工具和环境。现在,我们添加了对 Visual Studio 对 CMake 项目的 vcpkg 工件的支持,因此,如果你的项目包含 vcpkg 清单,则环境将在项目打开时自动激活。你可以在 Visual Studio 博客文章中了解有关此内容的详细信息。
游戏开发
我们正在努力将虚幻引擎集成到Visual Studio中。从17.4开始,你现在可以直接在IDE中查看哪些虚幻引擎蓝图引用、使用和继承C++类。要启用此功能,请确保在VS安装程序中启用了“IDE对虚幻引擎的支持”组件,并从虚幻商城下载Visual Studio集成工具。
请留意 17.5 中的更多新功能,请告诉我们你对蓝图集成的看法!
总结
这次的更新,为广大C++开发者带来了很多新的特性,有机会的话,可以尝尝鲜。先立一个Flag:明天有空一定尝尝鲜。
最后
Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。本文来自:《What’s New for C++ Developers in Visual Studio 2022 17.4》