程序员和芯片设计师看似生活在不同的世界里——一个写代码,一个画电路。但2026年4月的两个看似无关的进展,揭示了它们正在被同一个问题驱动:我们在"猜测"上浪费了太多资源。
C++26:一门45岁语言的"中年觉醒"
InfoQ本周报道,C++26标准草案已经完成。C++标准委员会前主席Herb Sutter将这个版本称为C++历史上"最重要的进化之一"。
四大核心变革
1. 反射(Reflection)
C++终于有了编译期反射机制。这意味着你可以在编译时查询类型信息、成员函数、继承关系等元数据。
| |
为什么重要? 反射是Java、C#等语言几十年前就有的能力。C++缺乏反射,意味着大量重复的样板代码——序列化库、RPC框架、ORM映射都需要宏技巧或代码生成。反射的引入将淘汰大量的C++代码生成工具。
2. 内存安全机制
受Rust的影响,C++26引入了新的内存安全特性。虽然不像Rust的所有权系统那么严格,但它提供了:
- 边界检查增强:更强的数组和指针安全
- 生命周期注解:帮助编译器检测悬垂引用
- 安全子集:一个受限的C++子集,保证不会出现内存错误
这是C++对美国政府"要求关键基础设施软件使用内存安全语言"号召的回应。不是拥抱Rust,而是让C++自己变得更安全。
3. 合约(Contracts)
| |
合约让你在函数签名中声明前置条件和后置条件。编译器可以在编译期和运行时验证这些条件。这不是新概念(Eiffel语言30年前就有),但对C++生态来说是一个重要的正确性保证工具。
4. 新异步模型
C++26引入了新的异步编程模型,对标Rust的async/await和Go的goroutine。这意味着C++的并发编程终于有了现代化的表达方式,不再需要依赖线程池+回调的传统模式。
投机执行:硅片上最昂贵的"猜测"
SemiWiki本周发表了一篇深度文章:《Speculation: Silicon’s Most Expensive Compulsion》(投机执行:硅片最昂贵的强迫症)。
作者Dr. Thang Tran(Simplex Micro创始人兼CTO)提出了一个尖锐的观点:现代处理器中用于投机执行的晶体管,大部分是浪费的。
什么是投机执行?
现代CPU不会老老实实地一条指令一条指令地执行。它会**“猜测”**后面可能要执行的指令,提前开始执行。在条件判断的结果还没有计算出来时,CPU就已经"猜"了一个分支开始执行。如果猜对了,节省了等待时间;如果猜错了,扔掉结果重新来。
问题在哪里?
1. 猜错的代价巨大
现代高性能CPU的流水线深度可达20-30级。猜错一次意味着扔掉20-30个时钟周期的工作。处理器中大约30-40%的晶体管专门用于支持投机执行和错误恢复。
2. 安全噩梦
2018年的Spectre和Meltdown漏洞就源于投机执行。CPU在"猜测"执行过程中访问了不该访问的内存,虽然结果被丢弃了,但它留下的缓存痕迹泄露了机密信息。
时至今日,投机执行相关的侧信道攻击仍然是处理器安全的最大威胁之一。IEEE Spectrum本周报道的"后量子密码学竞赛"中也强调了这一点——即使加密算法本身是安全的,硬件层面的侧信道也可能泄露密钥。
3. 能耗黑洞
那些被猜错而丢弃的计算,消耗了真实的电力。在AI数据中心中,每一瓦电力都弥足珍贵时,这种浪费格外刺眼。
替代方案:基于时间的调度
Dr. Tran提出了一种**基于时间的调度(Time-Based Scheduling)**方法,核心思想是:
- 不再猜测分支方向
- 而是让编译器在编译时就决定指令的调度顺序
- 把"运行时猜测"变成"编译时规划"
这与C++26引入合约和更强的编译期特性形成了有趣的呼应——两者都在试图把"运行时的不确定性"转移到"编译时的确定性"。
两个层次的"效率革命"
把C++26和投机执行的反思放在一起看,一个更大的叙事浮现了:
软件层:减少运行时的"猜测"
| C++26特性 | 减少的"猜测" |
|---|---|
| 反射 | 不再猜测类型结构→编译期确定 |
| 合约 | 不再猜测函数输入是否合法→编译期/运行时验证 |
| 内存安全 | 不再猜测指针是否有效→编译期证明 |
| 新异步模型 | 不再猜测并发执行顺序→结构化并发 |
硬件层:减少晶体管的"猜测"
| 传统方式 | 新方向 |
|---|---|
| 分支预测(猜测分支方向) | 编译期调度(消除分支) |
| 乱序执行(猜测指令依赖) | VLIW/显式并行(编译器决定) |
| 投机预取(猜测内存访问) | 基于profile的精准预取 |
共同的哲学
两者都在向同一个方向演进:把"运行时的猜测"转化为"设计时的确定性"。
这不仅是性能问题——每一次猜测都是一个攻击面(投机执行→Spectre),每一次运行时检查都是一个性能损失(内存安全→空指针异常)。从设计阶段就消除不确定性,同时解决了性能、安全和正确性三个问题。
对AI时代的特殊意义
这场"确定性革命"在AI时代有特殊的意义:
- AI推理的确定性:大模型推理的性能高度依赖底层硬件效率。如果CPU能减少30-40%的投机执行浪费,推理吞吐量将显著提升
- AI编译器的崛起:如果更多决策从运行时转移到编译期,编译器将需要变得更加"智能"——这恰好是AI可以发挥作用的领域
- C++在AI基础设施中的地位:PyTorch、TensorFlow、ONNX Runtime的核心都是C++。C++26的改进将直接影响AI框架的性能和安全性
写在最后
C++26和投机执行的反思,看似一个是编程语言的更新,一个是芯片架构的讨论。但它们的共同主题是:我们在"猜测"上投入了太多资源——无论是代码中的运行时检查,还是芯片中的投机执行晶体管。
在算力和能源日益稀缺的AI时代,确定性不是一种奢侈,而是一种必须。从语言到硅片,效率的革命正在两个层次同步展开。
参考来源
- C++26: Reflection, Memory Safety, Contracts, and a New Async Model - InfoQ
- Speculation: Silicon’s Most Expensive Compulsion - SemiWiki
- Carbon in the Age of AI Chips - SemiWiki
- Squishy Photonic Switches Promise Fast Low-Power Logic - IEEE Spectrum
- Crypto Faces Increased Threat From Quantum Attacks - IEEE Spectrum