说说VS2019 v16.8 预览版3中的一大波更新

说说VS2019 v16.8 预览版3中的一大波更新

作者:BlogUpdater |  时间:2020-09-20 |  浏览:99 |  评论已关闭 条评论

侦测到一大波的在途更新
对于C++开发者来说,Visual Studio 2019 v16.8 Preview 3引入了大量的更新,主要涵盖标准化,性能改进和生产力提升。下面,我们来看看。

C++20
我们从编译器,标准库和IDE等各个层面对主要的C++20特性的支持做了改进。现在你可以在同一个项目中,同时使用诸如Modules, Concepts, Coroutines和Ranges(部分支持)这些C++20里的新东西。

C++20 Coroutines目前已经开发完成,可以通过编译器选项/std:c++latest来使用。当使用C++20 Coroutines时,请注意需要包含这个头文件。之前的旧版本依然在<experimental/coroutine>和/await编译开关下可用,具体请参考之前有关C++20 Coroutines的文章。

C++20 Modules也已开发完成,也同样在/std:c++latest编译开关下可用。这个特性包含对头文件单元和实验性质的MSBuild的支持,借助于Modules,Visual Studio可以自动分析模块之间的依赖关系并以正确的顺序来构建它们,具体请参考之前有关C++20 Modules的文章。

同时,我们还部分地支持C++20 Ranges,目前开发团队依然在努力实现对Ranges的完整支持。这次的发布包含对大部分基于Ranges的算法支持。

除了Ranges,我们还对STL标准库进行了更新和优化。以下是一些要点:
> 通过std::atomic_ref,可以实现对非原子对象进行原子操作。
> 对std::midpoint和std::lerp的实现现已变为constexpr。
> std::execution::unseq指明在单个线程中一个算法执行流程可以实现为矢量化。
> 我们对std::reverse_copy进行了手动矢量化。
具体请查看STL标准库的ChangeLog。

IntelliSense现在可以提供对C++20 和头文件的扫描识别,重命名和concept定义的浏览。这其中会有一个已知的问题,我们将会在即将到来的Preview 4中解决。

另外,在MSVCZ中还添加了对[Conditionally trivial special member functions]的支持。

C11 / C17
所有主要的C11和C17特性都已支持,可以在编译开关/std:c11和/std:c17下使用。主要包含以下几个要点:
> _Pragma
> restrict
> _Noreturn和
> _Alignas, _Alignof和
> _Generic和头文件
> _Static_assert

因为目前有些可选特性还没有被支持,所以,目前还不能说我们支持C99。

vcpkg
vcpkg现已支持二进制缓存(binary caching)和清单文件(manifest files)。
以vcpkg.json命名的清单文件应该会出现在你的工程目录下并可以方便的提交到版本控制系统中。
可以在这个文件中添加库的依赖项,这样vcpkg就可以自动安装那些依赖的库。
下面是一个清单文件的例子:

当vcpkg第一次编译的时候,可以将生成的二进制文件进行缓存,这样就可以避免保存重复的文件。缓存的位置可以被设置到文件系统中的任意位置,也可以设置为一个远程共享目录或者或者手动的存储位置,具体请看我们有关vcpkg的文章。

CMake和Linux
Visual Studio自带的CMake版本已经升级至3.18版本。开发者可以在这个版本中用上最新的CMake调优功能。
你还可以在Visual Studio上直接调试WSL或者远程Linux中产生的Core Dump文件。这个特性对于那些需要在Linux上部署但又希望使用熟悉的调试工具进行调试的开发者来说,确实十分有用。

我们优化了Linux工程缺失编译工具的错误提示。在之前的版本中,你会在编译和调试的时候碰到一大堆的错误,现在的变化是,我们在工具栏和错误列表上直接显示一个清晰容易理解的错误提示,来告诉你缺少什么工具。

生产力
基于IntelliSense引擎的code linter,我们在文本编辑器中可以显示新的警告提示和快速修复。
你可以在[Tools->Options->Text Editor->C/C++->CodeStyle->Linter + Fixup]中配置它们。
对于代码中可能出现的算术溢出,未初始化本地变量和转换一个整除结果到浮点等,文本编辑器都会给出提醒,如下图所示:

代码分析
目前我们的代码分析工具已经可以支持SARIF 2.1标准: 工业标准静态分析日志格式。
SARIF 2.1强化了Visual Studio中的代码分析体验,包括常规和后台模式的错误列表,快速修复提示等。
在将来的版本找那个,我们还计划基于SARIF日志中的信息,对代码提示按照级别进行不同的颜色区分(信息/警告/错误)。

总结
我突然感到一丝惊喜:老大哥微软,她确实没有忘记我们这些搞C++的劳苦大众。
请你,在开发C++的路上,再多一点点坚持。

最后
Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《A Multitude of Updates in Visual Studio 2019 version 16.8 Preview 3》

标签:

评论已关闭。