元編程能力大升級!ISO 委員會完成 C++26 特性凍結
作者 | Sergio De Simone
譯者 | 田橙
本月早些時候,ISO C++ 委員會正式凍結了 C++26 的功能集,這標誌着 C++ 的下一個主要版本迎來了一個重要里程碑。其中,編譯時反射、契約、異步執行等衆多備受矚目的新特性赫然在列。
靜態反射 (Static reflection) 支持在編譯期對類型和行爲進行自省,其目標是擴展 C++ 的元編程能力。在基礎層面,反射允許開發者編寫如下代碼,輕鬆將枚舉 (enum) 轉換爲字符串:
使用反射的表層語法非常簡潔,這與 現代 C++ 的設計哲學 保持了一致。然而, 上述功能的底層實現卻要複雜得多。儘管如此,我們依然可以從中一窺反射即將解鎖的強大能力:
反射將以一種早期形態首次亮相於 C++,並有望在未來的版本中不斷演進。即便如此,它已然足夠強大,足以支持一些高級用例,例如爲 JavaScript 和 Python 等其他語言生成綁定。Herb Sutter 在其最新的 Trip Report 中如此描述該特性:
未來,利用反射,我們甚至有望通過“令牌注入”(token injection)的方式,在同一個源文件中直接生成 C++ 代碼。
在最近的 ISO C++ 委員會會議上,被接納進標準的新特性還包括:用於 Ranges 庫 的並行算法;旨在異步上下文中通過 RAII(資源分配即初始化)風格編程來進行資源管理的 異步作用域 (async scopes);以及能爲線程池提供高級執行上下文的 並行調度器 (parallel scheduler)。
此前會議中已接納的一些主要特性包括契約 (contracts)、異步執行 (asynchronous execution) 以及衆多其他功能,例如:通過包索引 (pack indexing) 增強模板元編程、用於包含二進制資源的 #embed 指令、邊界檢查迭代器和空指針驗證、SIMD 並行等等。
契約 (Contracts) 旨在通過 [[pre:]]、[[post:]] 和 contract_assert 來支持“契約式設計”。該特性 原計劃在 C++20 中引入,但最終從最終草案中被移除,如今它終於正式進入標準。
std::execution 提供了一套在通用執行資源上管理異步執行的機制。其核心概念是發送者 (sender) 和接收者 (receiver):發送者代表一個異步工作單元,它將其結果發送給接收者。該框架還由與異步操作相關聯的狀態 (state) 和一個輕量級調度器 (scheduler) 等概念共同構成。
C++26 的相關工作仍在繼續,但正如 Sutter 所強調的,其完成進度比許多人預期的要快得多,目前 GCC 和 Clang 已經支持了約三分之二的已採納語言特性。InfoQ 將持續關注並報道下一代 C++ 標準的演進過程。
https://www.infoq.com/news/2025/06/cpp-26-feature-complete/