Skip to content

Latest commit

 

History

History
36 lines (24 loc) · 2.53 KB

File metadata and controls

36 lines (24 loc) · 2.53 KB

原生后端评估(M7 研究项)

状态:评估文档(路线图 M7+ 的"原生后端评估"交付物) | 日期 2026-08-21 结论先行:不建议立即启动;前置条件两项未满足,启动窗口预估在自举成熟 + ABI 冻结之后。

1. 问题定义

当前管线:.cpp2 → cpp2c(转译)→ C++23 编译器 → 原生码。双前端税 = cpp2c 全量扫描 + C++ 前端再解析(IMPL §6.1)。原生后端 = 用自己的代码生成器替代 C++ 编译器,消除第二前端。

2. 三条候选路线

路线 优势 致命约束
LLVM-C API 成熟优化管线、调试信息、全平台 引入 LLVM 依赖(工具链体积/构建复杂度暴涨,违背"单一可执行零依赖"约定);C API 稳定性尚可但绑定成本真实
Cranelift 类小型后端 轻量、编译快 C++ ABI 互操作(调用 std::string、异常表、Itanium name mangling)需自建——工作量即完整后端
手写 x64 直译 零依赖极致 平台锁定;优化器从零写起不现实

3. 前置条件(未满足项)

  1. ABI 冻结:生成码与 C++ ABI 深度绑定(std::string/std::vector 布局、expected 异常表或替代方案、name mangling)。转译模式下这些由 C++ 编译器代管;原生后端必须自己背下来。先决条件:定义 cpp2 自有最小运行时 ABI(string/vector/错误通道),与 C++ ABI 解耦或显式冻结映射
  2. 自举成熟(M7a 进行中):基础设施(bench_gen 等)用 cpp2 编写只是第一步;足够大的组件自举后,语言的表达力与诊断质量才有资格支撑后端开发。

4. 分阶段建议(若启动)

阶段 内容 判据
P0 冻结 cpp2 最小运行时 ABI(数据布局 + 错误通道表示) ABI 文档 v1
P1 "直译后端"原型:C++ ABI 兼容,仅绕过 C++ 前端(仍链接 libstdc++) showcase 子集不经 g++ 编译运行
P2 评估引入 LLVM-C(仅此阶段决策是否值得依赖) 与 P1 对比编译期/运行期
P3 自有优化器(pass 管道裁剪自 LLVM 或自研 O0+基本优化) 微基准 vs 转译模式 ±20% 内

5. 当前定位

转译优先策略(IMPL §1.1)在 M1–M6 的实践中持续兑现其承诺:三家编译器矩阵、优化白拿、互操作天然。原生后端的收益(编译速度)在千单元压测中已被 headers 后端的并行装箱大幅追平(24.7s 全量 / 1.8s no-op),紧迫性进一步下降。

建议:维持转译为主干;M7a 自举按切片推进;P0(ABI 文档)可作为纯设计工作先行,实现启动等自举规模与用户信号。