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