状态:评估文档(路线图 M7+ 的"原生后端评估"交付物) | 日期 2026-08-21 结论先行:不建议立即启动;前置条件两项未满足,启动窗口预估在自举成熟 + ABI 冻结之后。
当前管线:.cpp2 → cpp2c(转译)→ C++23 编译器 → 原生码。双前端税 = cpp2c 全量扫描 + C++ 前端再解析(IMPL §6.1)。原生后端 = 用自己的代码生成器替代 C++ 编译器,消除第二前端。
| 路线 | 优势 | 致命约束 |
|---|---|---|
| LLVM-C API | 成熟优化管线、调试信息、全平台 | 引入 LLVM 依赖(工具链体积/构建复杂度暴涨,违背"单一可执行零依赖"约定);C API 稳定性尚可但绑定成本真实 |
| Cranelift 类小型后端 | 轻量、编译快 | C++ ABI 互操作(调用 std::string、异常表、Itanium name mangling)需自建——工作量即完整后端 |
| 手写 x64 直译 | 零依赖极致 | 平台锁定;优化器从零写起不现实 |
- ABI 冻结:生成码与 C++ ABI 深度绑定(std::string/std::vector 布局、expected 异常表或替代方案、name mangling)。转译模式下这些由 C++ 编译器代管;原生后端必须自己背下来。先决条件:定义 cpp2 自有最小运行时 ABI(string/vector/错误通道),与 C++ ABI 解耦或显式冻结映射。
- 自举成熟(M7a 进行中):基础设施(bench_gen 等)用 cpp2 编写只是第一步;足够大的组件自举后,语言的表达力与诊断质量才有资格支撑后端开发。
| 阶段 | 内容 | 判据 |
|---|---|---|
| P0 | 冻结 cpp2 最小运行时 ABI(数据布局 + 错误通道表示) | ABI 文档 v1 |
| P1 | "直译后端"原型:C++ ABI 兼容,仅绕过 C++ 前端(仍链接 libstdc++) | showcase 子集不经 g++ 编译运行 |
| P2 | 评估引入 LLVM-C(仅此阶段决策是否值得依赖) | 与 P1 对比编译期/运行期 |
| P3 | 自有优化器(pass 管道裁剪自 LLVM 或自研 O0+基本优化) | 微基准 vs 转译模式 ±20% 内 |
转译优先策略(IMPL §1.1)在 M1–M6 的实践中持续兑现其承诺:三家编译器矩阵、优化白拿、互操作天然。原生后端的收益(编译速度)在千单元压测中已被 headers 后端的并行装箱大幅追平(24.7s 全量 / 1.8s no-op),紧迫性进一步下降。
建议:维持转译为主干;M7a 自举按切片推进;P0(ABI 文档)可作为纯设计工作先行,实现启动等自举规模与用户信号。