EDG C++ 前端开源了
EDG 那个长期以来在许多专有编译器、IDE 和静态分析工具底层使用的商业 C/C++ 编译器前端,现已在 Apache 2.0 许可证加 LLVM exception 下开源。评论者强调了它在标准符合性方面的声誉、模拟多个主流编译器方言(GCC、Clang、MSVC)的能力、源到源转换能力,以及极快的构建速度。与此同时,他们也指出 EDG 公司正在收尾,这让长期维护前景充满疑问,并进一步凸显了 Clang 和 GCC 作为主导开源 C++ 前端的更大趋势。
EDG C++ 前端是什么
- 长期以来在许多专有编译器、IDE 和静态分析器底层使用的商业 C/C++ 编译器前端。
- 与 GCC、Clang 和 MSVC 并列的四大 C++ 前端之一。
- 重点在于解析、完整语义分析以及生成中间语言(IL);不是完整的优化后端。
- 可作为 C++ 到 C 和 C++ 到 C++ 的源代码生成器。
开源、许可证与公司状态
- 该前端现已在 GitHub 上公开,采用 Apache-2.0 + LLVM exception。
- LLVM exception:允许在分发嵌入了部分代码的二进制文件时无需遵守某些 Apache 条款,并通过放弃冲突的专利/赔偿条款来允许与 GPLv2 组合。
- 多条评论指出该公司正在收尾阶段;开源被视为一种体面的退场方式,也为剩余客户提供过渡桥梁。
技术能力与设计
- 能够模拟 GCC、Clang、MSVC 以及其他编译器的许多版本和方言,包括它们的怪癖和缺陷。
- 支持许多 C++ 标准,最高到(据称)接近 C++23,并包含一些 C++26 特性;也支持许多方言(GNU、Microsoft、较早的 cfront 等)。
- 提供源到源转换后端,以及用于检查 IL 和用于模板实例化的 prelinker 工具。
- 主要使用可移植 C 和自定义数据结构编写,不依赖 C++ 标准库,编译非常快,生成的二进制文件也很小。
在 C++ 历史中的角色与影响
- 被用于大型商业编译器中(包括一些嵌入式和主机平台工具链)。
- 是唯一完全支持旧 C++98
export模板的实现,这影响了它们最终被移除。 - 曾被用于原型验证较新的 C++ 特性,例如静态反射。
生态影响与未来前景
- 许多人认为这一发布是“大新闻”,但也意味着一个重要前端的事实性寿终正寝,因为大多数厂商已经转向或正在转向 Clang/GCC。
- 也有人希望开源能让 EDG 获得“第二次生命”;但考虑到 C++ 前端的复杂性以及缺乏明确的维护者基础,另一些人持怀疑态度。
- 讨论提到客户数量下降,以及跟进不断增长的 C++ 标准所带来的负担。
代码库特征与风格
- 具有鲜明的、较早期的 C 风格:函数签名和左花括号之间插入注释,命名约定也很特殊(例如
a_/an_前缀)。 - 被视为编译器工程历史的一个切片,拥有非常长的提交历史,以及一些古怪的组件(例如一个大型手工构建的 Unicode FSM)。