虽然之前微软已经预告今年夏天会推出64位的Visual Studio 2022预览版了,不过既有的Visual Studio 2019还是有在继续更新的~
而这次推出的,则是号称支持C++20完整功能的16.10正式版本了!官方的公告是:《Visual Studio 2019 v16.10 and v16.11 Preview 1 are Available Today!》。
这次更新,在C++ 的部分,最主要的应该就是C++20 的支持了~官方是宣称在功能面已经完整(feature-complete)了。
不过在建置时,要设定成/std:c++latest,设定成/std:c++20是会缺少某些功能的。
而在官方的介绍中,特别强调了format、日历与时区的功能。
format
其中,format这个函式库(参考)是基于{fmt}(官网)的文字格式化函式库,可以快速地进行字串的处理。(Boost Format被抛弃了XD)
下面就是一个极为简单的范例:
#include < format >
#include < iostream >
int main ()
{
auto version = 20;
std::cout << std:: format ( " STL is now C++{} feature - complete! " , version )
<< std:: endl ;
}
日历和时区
此外,日历和时区则是chrono这个C++11引进的时间函式库的延伸。
他现在变成可以去处理年、月、日、星期几这些本来无法处理的信息,同时也可以处理时区的信息;这点在很多状况下都是满实用的~(参考)
下面是一个简单的例子:
#include < chrono >
#include < iostream >
int main ()
{
std::chrono:: year_month_day ymd { std::chrono::May / 23 / 2024 };
std::cout << ymd << " is "
<< std::chrono:: year_month_weekday ( ymd ). weekday ()
<< std:: endl ;
}
这样就可以轻松地知道某个日期是礼拜几了~
同时,从16.9开始支持的LLVM OpenMP,现在除了x64外,也开始支持x86与ARM64了。
而针对C++20的ranges,微软在《C++20 Ranges are complete in Visual Studio 2019 version 16.10》这篇,则也有另外做说明。
另外,虽然这篇没有提到,但是在之前的《2x-3x Performance Improvements for Debug Builds》时有提到,在16.10 preview 2的时候微软也强化了Debug版的效能、可以到达2 ~ 3倍!
这点对于要跑debug 来找问题的人来说,真的很实际!毕竟以往STL 的debug 效能实在是非常悲剧啊…
不过这次更新下来让Heresy觉得比较尴尬的是,以目前在C++20的标准支持上,感觉上变成Visual Studio领先g++和clang了?
像是format的部分,g++和clang都还没支持,所以如果要用的话,还是得自己去找{fmt}来用了…以前常常是Linux开发环境可以用了,要等VC更新,怎么觉得现在反了?o_O
除了上面C++ 的部分外,不过Visual Studio 整合的Git 功能也做了不少改进,号称可以提高生产力;不过由于Heresy 自己是习惯使用TortoiseGit,所以这部分就让有在用的人自己去玩啰~