2026 年 9 月 30 日,EDG C++ 前端的完整源代码在 github.com/edgcpp/compiler 公开,许可证为 Apache License 2.0(附带 LLVM exception)。同一天,The C++ Alliance 成为这个项目的非营利托管方。发布消息登上 Hacker News 首页(172 分、79 条评论),Lobste.rs 也出现对应讨论串。对于一个闭源销售了三十多年、藏在全球主流 C++ 工具链身后的编译器前端来说,这是一次真正意义上的"揭盖":代码、构建系统、内部文档、全部 git 历史(最早提交可追溯到 1990 年)一起开放。

EDG 是谁:六个人写了三十年编译器前端
Edison Design Group(EDG)1988 年由 J. Stephen Adamczyk 在新泽西创立,核心团队加上后来的 John Spicer、Daveed Vandevoorde,公司规模长期维持在 6 人左右。它不卖编译器产品,卖的是编译器最前端那一段:预处理、词法与语法分析、语义分析、模板实例化,输出一份与机器无关的中间语言(IL),由客户的工具接着生成代码或做分析。
这套模式在业界的渗透面远超它的名气。Intel C++ 编译器经典版(icpc)用它做前端;NVIDIA 的 CUDA 编译器 NVCC 用它处理 C++ 语法;Microsoft Visual Studio 的 IntelliSense 用它做 C++ 代码理解——注意,是 IntelliSense 用 EDG,而 MSVC 编译器本体用微软自研前端,两套并存;SGI MIPSpro、PGI、Comeau C++、Green Hills 等一长串商业编译器也都曾是它的客户。如果你在 2010 年前后用 CUDA 写过一个 kernel,你的代码先被 EDG 的前端解析过,才轮到 NVCC 的后端生成 PTX。
EDG 前端的技术指标(数据来自 EDG 官方产品页):
- 约 655,000 行源代码,其中约 30% 是注释;代码为 C++11 编写
- 约 600 页内部文档,其中"External Interface"章节此前作为 PDF 公开销售
- 约 2,500 种错误消息,诊断信息带插入符(caret)精确定位到出错列
- 支持完整 C++17/14/11/98/03,C++20 特性按项推进
- 方言支持面极宽:GNU、Clang、MSVC(含 C++/CLI)、ANSI/ISO C 的 C89/C99、Embedded C TR、Sun C++、cfront 2.1/3.0、K&R C
最后一项是 EDG 的护城河。C++ 各家编译器对方言的偏离(GNU 扩展、MSVC 的老毛病、cfront 时代的遗迹)造就了大量只在这些方言下才编译得过的存量代码,EDG 的策略是把每一种方言都原样复刻,甚至复刻其他编译器的 bug(bug emulation),保证"用 Clang、GCC、MSVC 编译得过的代码,用 EDG 也能编译过"。嵌入式和国产编译器厂商买的正是这份兼容性。
开源的不是情怀,是解散前的资产处置
EDG 在 2025 年宣布公司将于 2026 年关闭,前端开源是既定安排的一部分,9 月 30 日是履约日。Hacker News 上的讨论对此并不意外:核心团队年龄到了,"退休早晚的事"在圈内流传了接近十年。这次开源因此和常见的"商业公司开源试水"完全是两回事——没有商业实体在后面续命,没有 open core,没有云服务,是资产清算意义上的完整移交。
承接方 The C++ Alliance 是一家非营利组织,本身有 C++ 编译器工程师在编,深耕 C++ 标准委员会和 Boost 社区,此前就运营着 fiscal sponsorship(财务托管)基础设施。交接后的治理结构在官网写得明确:
- Fiscal Sponsorship Committee(FSC) 监督全部流程,由 John Spicer 担任主席(Spicer 本人就是 EDG 元老,C++ 模板体系的核心开发者之一),委员会将吸纳 EDG 用户社区的志愿者
- 开发分三条轨道:用户社区提交的 PR(Track 1)、Alliance 在编工程师的日常维护即时发布(Track 2)、社区出资的大型特性开发(Track 3)
- 三条轨道的改动全部落在同一个公开仓库、同一时间对所有人可见,官方原话是"No one gets early access"
仓库里有什么:前端、双后端、prelinker 和完整历史
github.com/edgcpp/compiler 的目录结构:
src/ 前端主体(约 65.5 万行中的大部分)
include_c++/ C++ 标准库头文件配置
include_c99/ C99 头文件配置
lib_src/ 运行时支持库(最小实现,不含 I/O 等完整库)
bases/ 宿主/目标平台适配层
tests/ 测试集
benchmarks/ 基准测试
doc/ 文档构建
dev_tools/ 开发工具链
dev_annex/ 面向人类与 AI agent 的补充教程文档除前端主体外,仓库包含几件在开源世界没有同类物的东西:
C 代码生成后端:把 C++ 程序翻译成等价 C 代码。这是 cfront 时代的活化石技术路线,今天仍然有真实用途——把 C++ 库带进只认 C ABI 的环境(嵌入式工具链、FFI 绑定生成)。
C++ 到 C++ 的源到源变换后端:官方定位是 source-to-source transformation 应用,即基于完整 C++ 语义理解的程序改写、重构与分析工具的底座。商业时代它是静态分析厂商的引擎,现在任何人都拿得到同样的语义分析能力。
Prelinker:自动处理模板实例化的独立工具。在 90 年代编译器普遍不处理跨编译单元模板实例的去重问题时,prelinker 负责决定每个模板实例在哪编译、在哪链接。Clang/GCC 早已用 COMDAT 段和链接器合作解决了这个问题,这份代码是那段历史的技术存档,也是理解模板实例化语义的一份可运行参考实现。
完整 git 历史:最早提交在 1990 年,且时间线连续。三十多年商业编译器的演化史——包括 C++98/03/11/14/17 每一轮标准落地时前端如何改——都在提交记录里。这份历史对编译器研究者的价值可能不亚于代码本身。
三十年来最硬核的"实现经验":export template
评价 EDG 的行业角色,绕不开 C++ 历史上最著名的标准事故:export template。
C++98 把 export 关键字写入标准,要求编译器支持"分离的模板定义"——模板声明在头文件,定义在别处,编译器跨编译单元找到实现。委员会在只有 EDG 一家坚决反对的情况下通过了这个特性。反对理由是实现代价与收益完全不成比例。结果是:全世界十余年没有任何编译器实现它,最终只有 EDG 自己在 2002 年前后做出来了——同一个团队实现 export 花掉的精力,比实现一整个 Java 编译器前端还多。若干年后 C++11 干脆把 export 从标准里删除,重新分配了这个关键字(留给后来的 export module),等于官方承认 EDG 当年的反对是对的。
这段历史在 C++ 圈是"实现经验反推标准设计"的经典案例。开源之后,这份 export 实现的源码任何人都可以读——世界上唯一一版可运行的 C++98 export template 实现,就在这个仓库里。
构建它有多容易:六万行配置外的一条极简路径
仓库提供了标准 CMake 构建体系(要求 CMake ≥ 3.19、Python ≥ 3.6、ninja 可选),预置了 macOS ARM(clang)、Linux(gcc/clang)、Windows(MSVC)的 presets。官方文档同时给出了一个显眼到像是宣言的极简路径:
在
src/defines.h里写好#define配置,进src目录跑g++ -std=c++14 *.c即可构建前端。
一个 65 万行的 C++ 前端可以用单条 g++ 命令编出来,说明代码的宿主/目标依赖隔离做得很干净——这也与官方文档"宿主与目标依赖被仔细地从主体代码中分离"的说法互相印证。这种可移植性正是它当年能同时卖给十几家编译器厂商的工程基础。
README 里有一处细节:dev_annex/ 目录的定位写着"进一步帮助 humans 和 AI agents 做产品开发"的 tips、tricks 与教程。一份 1990 年起步的代码库,交接文档同时写给人类和 AI agent 看,这个细节本身就是 2026 年编译器工程的一个注脚。
许可证选了 Apache-2.0 WITH LLVM-exception:专利授权条款与 GPLv2 的冲突通过 LLVM exception 豁免,让这份代码可以被吸收进 GPLv2 项目(包括 GCC 阵营的工具)而无需改用 GPLv3。对一个希望被最大化重用的"遗产代码库",这是合理的标准选择。
对 C++ 生态意味着什么
对四前端格局的影响。主流 C++ 编译器前端只剩四个:GCC、Clang、MSVC、EDG,其余商业编译器几乎都是这四家的换皮或衍生。Hacker News 上的一条高票评论把这次开源定性为"四大前端之一进入临终关怀"——Intel classic icpc、NVCC 这些客户早已或正在迁往 Clang,EDG 关闭后商业需求会继续萎缩。这个判断有依据,但开源为它留了一个变数:Clang 的代码库体量和入门门槛远高于 EDG 前端(后者以文档极全著称),教育、静态分析、源到源变换这类场景,多了一个 Apache-2.0 的可选语义引擎。
对嵌入式与国产工具链。EDG 的传统客户结构里很大一块是嵌入式编译器厂商(需要方言兼容和交叉编译配置)。商业授权终止后,这类厂商面临迁往 Clang 的成本,或者基于 EDG 开源版自维护。Apache-2.0 允许闭源衍生,这条路是通的。
对编译器研究者与学生。此前想读一个生产级 C++ 前端,选择是 GCC(GPLv3)、Clang(Apache-2.0,但体系庞大)。EDG 前端的优势是体量相对可控、600 页内部文档齐全、方言覆盖完整,且第一次可以合法地把它当作教学与研究材料拆解。cfront 之后,新一代开发者又有了一份"能读懂的 C++ 编译器"。
对 AI 编码工具。语义级源到源变换是 automated refactoring、代码迁移(例如 C++17 到 C++23)、大规模代码理解的长尾需求。EDG 的 C++ 生成后端和分析型 IL 是为这类应用准备的原生接口,比用 LLM 直接改代码多一层编译器保证。dev_annex 甚至已经为 AI agent 写好了上手文档。
参考链接:
- 官方公告:https://edgcpp.org/
- 源码仓库:https://github.com/edgcpp/compiler
- EDG 公司页(历史产品资料):https://www.edg.com/c
- Wikipedia:Edison Design Group
- Phoronix 报道:EDG C/C++ Front-End Open-Sourced