C++26 SIMD 與 Sender/Receiver 拍板,Contracts 提案卻遭喊卡待審
ISO C++ WG21 論文 / isocpp.org CppCon 2026 · 2026-08-31
ISO C++ 委員會成員暨 JetBrains 工程師 Timur Doumler 於 8 月 31 日在 isocpp.org 公布 CppCon 2026 主題演講內容,聚焦C++26 草案中四項重大變更。同一天,Rust 專案的 Inside Rust 部落格發布 7–8 月專案管理報告,點名 Rust for Linux 團隊向上游提出的核心函式庫瘦身需求;羅馬舉行的 Netdev 0x1A 網路開發者大會影片與簡報也全數上線,展示核心內建 QUIC 與共享記憶體傳輸機制。
C++26:SIMD 與 Executor 底定,Contracts 命運卡在委員會
Doumler 整理出對日常開發影響最大的四項功能。sender/receiver 執行框架(P2300R10)已於 2024 年 6 月 WG21 聖路易全會通過併入工作草案,提供跨 CPU/GPU 非同步任務圖的標準詞彙,NVIDIA 已釋出參考實作 stdexec。std::simd(P1928R15)把原本停留在 Parallelism TS2 的資料平行型別正式併入標準,可攜式向量化程式碼不必再依賴編譯器專屬 intrinsics。
靜態反射提案(P2996R4)已於 2025 年 6 月索菲亞會議通過,允許編譯期查詢型別、列舉與成員中繼資料。相較之下,contract assertions(前置/後置條件與 assert 陳述式,P2900 系列)雖已於 2025 年 Hagenberg 會議併入草案,但 Adobe 工程師 Darius Neațu 在 2026 年 3 月發表的《Are C++ Contracts Ready to Ship in C++26?》(P4043R0)指出,委員會收到逾 20 則國家機構意見,質疑違約處理與強制執行語意的可靠性,並引用 P3911R2、P4009R0、P4005R0 等競爭提案仍未達成共識,建議延後至 C++29 或先發布白皮書。
| 提案 | 論文編號 | 目前狀態 |
|---|---|---|
| sender/receiver | P2300R10 | 2024/6 已通過併入 |
| std::simd | P1928R15 | 已併入工作草案 |
| 靜態反射 | P2996R4 | 2025/6 已通過併入 |
| Contracts | P2900 / P4043R0 | 2025 併入,2026 遭提案喊停 |
Rust 為 Linux 核心瘦身 core 函式庫,數值轉型 API 重新設計
Inside Rust 的報告點名 Rust for Linux 團隊提出兩項具體上游需求。核心函式庫模組化追蹤議題(Rust-for-Linux/linux#514)指出,core crate 內建的 atomics、core::io、浮點運算與 Unicode 處理對核心開發是不必要的負擔——核心有自己的記憶體模型 LKMM,額外的 core::io 也會干擾 Klint 等靜態分析工具。issue 列出的具體需求包括:
- 停用 atomics,改由 kernel crate 提供符合 LKMM 的版本
- 停用
core::io模組 - 保證
TypeId大小不超過 16 bytes(rust-lang/rust#148265) cfg(no_128_bit)停用 128-bit 整數格式化(rust-lang/rust#136385)
上游團隊已表態願意討論將 core 拆成多層設計,而非窮舉各種 cfg 組合。另一項需求來自 libs-team 的數值轉型 API 統整議題(rust-lang/libs-team#833),目標是為整數加寬(widen)與縮窄(narrow)轉型建立一致命名:縮窄轉型提供 saturating_narrow、wrapping_narrow、checked_narrow、strict_narrow、unchecked_narrow 五種語意變體,另有 cast_signed/cast_unsigned 處理正負號轉換,目前仍是討論中的提案。
Netdev 0x1A:核心內建 QUIC 與雙向零拷貝共享記憶體 socket
羅馬舉行的 Netdev 0x1A 兩場 Moonshot 議程分別展示核心層級 QUIC 傳輸與共享記憶體 socket 傳輸機制。Xin Long 主講的《Linux QUIC》(議程頁面)為核心新增 IPPROTO_QUIC socket 型別,將 RFC 9000 定義的串流管理、壅塞控制、遺失重傳、連線遷移放進核心,TLS 交握仍沿用既有 net/handshake 框架與使用者空間 tlshd 服務。
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_QUIC);
connect(sock, addr, addrlen);
sendmsg(sock, &msg, 0);socket API 維持 POSIX 慣例的 connect()/accept()/sendmsg()/recvmsg(),已透過 syzkaller 模糊測試與高速網路效能測試驗證,並有 Samba、curl HTTP/3 等真實應用案例。David Wei 主講的《Kernel shared memory socket transport》(議程頁面)則針對 splice/sendfile 只能在傳送端做到零拷貝的限制,提出建構在 AF_UNIX SOCK_SEQPACKET 之上、搭配 io_uring registered buffers 的共享記憶體傳輸層,目標讓收發兩端都零拷貝,取代各自實作的 boost::interprocess 之類函式庫,原型正準備提交 RFC。
原始來源:P4043R0 Contracts 存廢討論、Rust-for-Linux #514、Netdev 0x1A Linux QUIC