GCC 16 正式釋出:C++20 成為預設標準、C++26 反射與契約、AMD Zen 6 支援、Algol 68 實驗性前端
GCC Project · 2026-05-01
GCC 16 是本次發布週期的主要版本,帶來自 GCC 6(C++14 預設)以來最大幅度的 C++ 標準預設值調整,並在 C++26 支援與後端目標上同步擴充。
C++20 成為預設
GCC 16 將 -std 的預設值從 gnu++17 改為 gnu++20,對使用 requires 約束、Concepts、std::format、協程等 C++20 特性的程式碼不再需要明確指定標準旗標。依賴 C++17 特性但未明確指定 -std 的專案在升級至 GCC 16 後,必須在編譯系統中明確加入 -std=c++17。
C++26 新特性
- 反射(Reflection):以
^^T語法取得型別的 compile-time 後設資訊物件,並透過std::meta命名空間查詢成員、屬性、枚舉值等,是 C++ 歷史上期待最久的元程式設計功能之一。 - 契約(Contracts):
pre、post、contract_assert語法糖,在函式邊界注入可選的執行期檢查,違反時的行為由 contract violation handler 決定。 - constexpr 例外:允許在常數求值語境中拋出並捕獲例外,受限於異常傳播不得越過常數求值邊界。
- 顯式生命週期管理(C++23 補充):
std::start_lifetime_as<T>允許在已分配的原始記憶體中正式開始物件生命週期,解決部分未定義行為。 - 改善的 C++20 模組支援:新增
--compile-std-module選項,加速標準函式庫模組的獨立編譯。
向量化改進
自動向量化器新增對「無法靜態確定迭代次數的迴圈」的向量化支援,並能透過消除向量感應計算來處理帶有提前跳出(early break)的迴圈。投機性去虛擬化(speculative devirtualization)現在擴展至一般間接函式呼叫,且支援推測多個目標函式。
新硬體目標
- AMD Zen 6:
-march=znver6,支援 AVX-512 及相關延伸。 - Intel Wildcat Lake、Nova Lake。
- LoongArch32:新 32 位元架構支援,含多種 ABI 與 Function Multi-Versioning(FMV)。
- AMD Instinct MI300:實驗性 GPU offloading 支援。
診斷格式變更
JSON 診斷輸出格式已移除,改以 SARIF 為標準機器可讀格式,支援有向圖表示。新增 -fdiagnostics-add-output=experimental-html 旗標,可輸出含超連結的 HTML 診斷報告。分析器(-fanalyzer)現支援 C++ 程式碼,包含 NRVO 與例外處理路徑分析。
Algol 68 編譯器
GCC 16 加入實驗性 Algol 68 前端(ga68),為本發布週期中唯一的新語言實作,目前僅支援語言核心子集,Fortran 2023 三角函式等支援亦同步擴充。
原始來源:GCC 16 Release Notes — Changes, New Features, and Fixes
Rust nvptx64-nvidia-cuda 目標基線提升:PTX ISA 7.0 與 SM 7.0(Volta)成為最低要求
Rust Blog · 2026-05-01
Rust 專案宣布自 Rust 1.97(預計 2026 年 7 月 9 日釋出)起,nvptx64-nvidia-cuda 編譯目標將提升最低支援版本,不再支援 Maxwell(SM 5.x)與 Pascal(SM 6.x)GPU。
版本變更內容
PTX ISA 最低版本提升至 PTX ISA 7.0,需要 CUDA 11 或更新的驅動程式。GPU 架構方面,計算能力最低要求提升至 SM 7.0(Volta 架構,2017 年),不再支援舊於此的 Maxwell(SM 5.x)與 Pascal(SM 6.x)GPU。多數影響硬體「在 2017 年前後釋出,已超出 NVIDIA 的主動支援範圍」。
調整原因
舊版基線存在若干正確性問題:特定合法 Rust 程式碼在舊目標上會觸發編譯器崩潰或錯誤程式碼生成(miscompilation)。提升基線後,編譯器團隊可專注修正當前主流硬體的問題,而不必維護難以測試的舊架構支援。大多數 HPC 叢集現已全面遷移至 Volta 或更新架構。
影響範圍與遷移
在 rustc 旗標中明確指定 -C target-cpu=sm_60 等舊值的使用者,需將其更新至 sm_70 或更新值,或移除該旗標改由 LLVM 自動選擇。CUDA 11+ 驅動程式搭配 Volta 或更新 GPU 的使用者不受影響。Rust 1.97 beta 預計提前數週提供,給維護者留有測試時間。
原始來源:Rust Blog — Raising the baseline for the nvptx64-nvidia-cuda target
curl 8.20.0 修正九個 CVE:代理認證洩漏、SMB 連線錯誤複用、TLS 要求被忽略
curl project · 2026-04-29
curl 8.20.0 於 2026 年 4 月 29 日釋出,單一版本修正了九個安全漏洞,是近年修補數量最多的單次 curl 安全釋出之一。
CVE-2026-7168:跨代理 Digest 認證狀態洩漏(Medium,CWE-294)
當應用程式重複使用同一個 libcurl handle,先後透過不同 HTTP 代理進行 Digest 認證的請求時,handle 會錯誤地將第一個代理的 Proxy-Authorization 標頭傳送給第二個代理。影響版本 curl 7.12.0 至 8.19.0。命令列 curl 不受影響,僅 libcurl 應用程式面臨風險。
CVE-2026-6276:過期自訂 Cookie 主機導致 Cookie 洩漏(Medium)
libcurl 在某些重定向情境下,可能將自訂設定的 Cookie 傳送至非預期的主機,起因是 Cookie 主機比對邏輯未正確處理已快取的過期 Host 標頭。
CVE-2026-6253:代理憑證在重定向後洩漏(Medium)
當請求透過 HTTP 代理進行並遇到重定向時,libcurl 可能將代理認證憑證傳送至重定向目標的代理,而非僅限於原始代理。
CVE-2026-7009:Apple SecTrust 下的 OCSP Stapling 繞過(Medium)
在使用 Apple SecTrust TLS 後端的平台上,OCSP stapling 驗證可能在特定條件下被跳過,導致撤銷憑證不被偵測。
CVE-2026-4873:TLS 要求被忽略的連線複用(High)
連線複用邏輯在判斷是否可以複用現有連線時,可能未考量到 TLS/非 TLS 的差異,在需要加密連線的場景下複用了未加密連線,是本批次嚴重性最高的漏洞。
其他 CVE
CVE-2026-5773(SMB 連線錯誤複用)、CVE-2026-5545(HTTP Negotiate 連線錯誤複用)、CVE-2026-6429(netrc 憑證透過複用代理連線洩漏)、CVE-2026-6253(代理憑證重定向洩漏)均歸類為 Medium。
升級建議
所有嵌入 libcurl 的應用程式應升級至 8.20.0。Debian Bookworm、Ubuntu 24.04 LTS 等發行版正在回移修補。