支援 C++20 的 Visual Studio 2019 16.10

| | 0 Comments| 13:06
Categories:

雖然之前微軟已經預告今年夏天會推出 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,所以這部分就讓有在用的人自己去玩囉~

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *