有 C++ 23 設定的 Visual Studio 2022 17.13

| | 0 Comments| 13:43|
Categories:

Visual Studio 2022 推出 2025 年第一個版本、17.13 了~

官方的公告是《Visual Studio 2022 v17.13 is Now Available!》,不過內容只有重點、沒有細節,有想看詳細資料的話要自己去看 release note

而在 C++ 的程式開發的部分,這次有兩個主要的變化:

  • C++ 語言標準的部分加入 C++23 預覽
  • 進階指令集加入 AVX 10.1

比較完整的說明可以參考《What’s New for C++ Developers in Visual Studio 2022 17.13》和《MSVC Compiler Updates in Visual Studio 2022 version 17.13》這兩篇。

接下來,就來稍微仔細一點介紹個人覺得有用的更新吧~


C++ 23

C++23 這個標準雖然理論上是 2023 的東西,但是實際上似乎是拖到去年底才真的定案;而幾大編譯器基本上也都還沒有能完全支援(參考)。

Visual C++ 之前其實就已經支援部分標準了,但是都還是放在「/std:c++latest」裡面,沒有專用的設定。

而到了 17.13、微軟終於加入了「/std:c++23preview」這個參數了!

不過比較可惜的,目前還是在預覽階段,要到完整支援可能還要一段時間了。

而除了之前已經有支援的 C++23 功能,這次也有多支援一些東西;包括了:

  • 代表 size_t 的 integer literal:uz / UZ參考
  • std::generator參考

另外,現在也支援 CMake Presets v9,不過這部分 Heresy 就沒玩多少了。

至於其他的內容,主要應該是錯誤修正和改進了。


針對 x86 / x64 加入 AVX 10.1

在專案的「C/C++」下的「程式碼產生」裡的「啟用進階指令集」加入了 Intel 新的 AVX 10.1 指令集。

沒弄錯的話,Intel AVX10 系列的指令集是為了解決自家 12 代之後的 Core 處理因為採用 P/E Core 不同架構的大小核、結果把 AVX512 廢掉的問題而推出的新的指令集。

如果程式只打算給新的 Intel 處理器使用的話,那理論上把指令及改成 AVX10.1 應該會有一些效能上的增進?

但是由於 AMD 應該是都支援 AVX512 而不支援 AVX10,所以如果要考慮相容性的話,可能還是選 AVX2 這個老標準會比較保險吧…

另外,現在還多了一個「啟用向量長度」的參數,可以針對 AVX512 和 AVX10.1 設定向量長度(參考)。


GitHub / GitHub Copilot

Visual Studio 整合 GitHub 和 GitHub Copilot 已經很久了,在去年底也推出了可以體驗用的 GitHub Copilot 免費版;由於免費板給的可使用量很少、所以其實基本上都會用完,但是在之前的介面又看不出使用量,其實有點討厭?

這次更新後,GitHub Copilot 的選項裡面多了一個「Copilot 可用狀態」,算是終於有顯示一些使用的細節(個人覺得還是很不足就是)了:

另外,在 GitHub 登入的部分也有做了一些修改,包括可以登入多個 GitHub 帳號等等,但是這些 Heresy 就沒認真玩了。

而在 GitHub Copilot 的部分,這次也加入了跨檔案存取、function calling、整合進入平行堆疊等功能;不過個人應該是不會玩太多就是了。


程式碼搜尋的改進

在「程式碼搜尋」(Ctrl + T)的部分,這次加入了「最近使用的檔案」的功能;在沒有任何搜尋條件的狀況下,檔案列表會顯示出最近看過的檔案。

此外,在檔案搜尋的時候,除了在 17.12 的時候允許加入「:line」的形式來指令要顯示的檔案的行數外,現在還可以用像是「file(line)」的形式,或是加上列(column)的編號來移動游標。


編輯器的水平卷軸

現在在「工具」、「選項」、「文字編輯器」、「進階」裡面,有一個「編輯器水平滾動條位置」的選項,可以把水平卷軸獨立出來,不用跟編輯器下方的其他資訊搶位置了~

下面是本來的設計:可以捲動的區域相當地小:

在把設定改成「一律顯示在編輯器匣上方」後,就會變成在上面獨立一條,比較方便操作。


大概就這樣了?當然其他還有不少變化,不過由於 Heresy 這邊大概用不太到,所以就不提了,有興趣的話自己看吧~

以個人來說,這次最主要的變化應該還是加入 C++23 的預覽版吧?雖然功能還不完整,但是由於 Heresy 還滿想直接用 std::expected 或是 std::optional 在 C++23 加入的 monadic operation 這些東西的,所以也在考慮要不要先切過去來用了~

Leave a Reply

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