Carbon Language 2024 路线图:从实验设计转向可用工具链与 C++ 互操作(含 2023 年度回顾)
【免费下载链接】carbon-langCarbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)项目地址: https://gitcode.com/GitHub_Trending/ca/carbon-lang
本文基于 Carbon Language 官方提案 proposals/p003564-roadmap-for-2024-and-a-retrospective-for-2023.md 整理。该提案宣布 Carbon 在 2024 年将重心从"让语言与工具就绪、供外界评估"转向"实现一个可工作的 Carbon 工具链,并打通 Carbon ↔ C++ 双向互操作"。读者读完本文,可以完整掌握 2024 路线图的四大目标、2023 年度关键结果的达成情况,以及这些规划在仓库源码与后续路线图中的落地证据。
提案摘要:2024 的关键词是"实现"
2024 年路线图提案的核心主张只有一句话:打造一个可工作的 Carbon 工具链,并使其支持 Carbon ↔ C++ 互操作。与往年相比,这一年显著更强调实现而非设计。提案明确解释了这一转变的动因:
- 外部关注者在尝试评估或参与 Carbon 时,越来越被"缺乏实现支持"所阻塞——无论是语言特性(language features)还是编译器功能(compiler functionality)都处于空缺状态;
- 经过数年的推进,Carbon 的设计已经足够成熟,足以支撑这种规模的实现工作,因此现在是采取更聚焦路线图的合适时机。
换句话说,2024 年不再以"设计是否完整"为第一优先,而是以"能否用真实编译器编译出真实程序"为验收标准。
2024 年四大目标详解
提案为 2024 年提出了四个相互依赖的目标,它们共同构成了从"语言实现"到"互操作落地"再到"社区共建"的完整链条:
| 目标 | 内容 | 本质 |
|---|---|---|
| 1 | 在工具链中实现足够的 Carbon 语言,构建起互操作中Carbon 一侧的有意义代码 | 编译器本体能力 |
| 2 | 教会工具链(借助 Clang)编译足够的 C++ 代码,构建起互操作中C++ 一侧的有意义代码 | 复用 Clang 前端 |
| 3 | 实现 Carbon 与 C++ 代码之间的互操作本身 | 双向桥接机制 |
| 4 | 将上述工作的方方面面分享给更广泛的 Carbon、C++ 与开源社区 | 社区建设 |
这四个目标之间存在严格的依赖关系:目标 1 是目标 3 的前提(Carbon 侧必须能产出可链接的真实代码),目标 2 是目标 3 的另一半(C++ 侧由 Clang 承担),而目标 4 贯穿始终。提案特别强调,2024 年的路线图"远比起往年更侧重实现",这种取舍本身也是对外界反馈的回应:人们评估 Carbon 时最需要看到的是"能跑起来的东西"。
与项目里程碑的关系:为什么聚焦"0.1 语言"
要理解这份路线图的价值坐标,需要回到项目里程碑体系 docs/project/milestones.md。提案提到的 0.1 语言 MVP 里程碑 是 Carbon 供 C++ 用户开始严肃评估的第一个可交付物,其核心要求包括:
- 语言侧:包、库、导入、命名空间等代码组织特性;用户自定义类型、继承(含虚派发)、运算符重载、sum types、泛型(checked generics 与集成模板);函数重载、控制流、match、错误处理等;
- 互操作侧:从 Carbon 调用 C++ 函数/类型、向 C++ 导出 Carbon 函数/类型、导入 C++ 模板、异常处理策略配置、基础类型与字符串/容器类型的透明映射等;
- 项目侧:一个能"即插即用"地充当 Clang C++ 工具链、支持最常见 Make/CMake 构建系统、并在 Windows/macOS/Linux 上可安装运行的 Carbon 工具链,以及详细的 memory safety 策略。
2024 路线图正是为补齐"项目侧"这一块而设。里程碑文档中还有一个重要观察:0.1 标准库应大量借助 C++ 标准库(通过互操作),因此互操作不只是"锦上添花",而是 0.1 里程碑得以成立的基础设施。这与提案将互操作列为年度核心目标完全一致。
2023 年度回顾:为评估而准备的一年
提案对 2023 年的总结是"执行得非常出色,但结果喜忧参半"。2023 路线图的主题是"让语言和工具都为评估做好准备,并在 C++ 社区建立支撑评估的语境"。逐项来看:
语言设计:fantastic 的进展
2023 年在语言(设计)就绪上取得了显著进展:
- 建立了 里程碑定义,为项目提供了跨年度的方向锚点;
- 关闭了年初时设计中最关键的一批缺口,剩余缺口要么风险更低、要么接近完成、要么"真的需要互操作才能有效探索"。
换句话说,到 2023 年底,设计层面已不再构成项目的主要瓶颈——这正是 2024 年可以放手去做的前提。
工具链:进展巨大,但任重道远
提案承认工具侧同样取得了巨大进展,但"还有很长的路要走",并明确工具链成为 2024 年的焦点。这一判断在仓库中得到了延续——proposals/p003532-focus-implementation-effort-on-the-toolchain.md 提议将接下来 1~2 年的实现精力全部集中在工具链上:
- Explorer 的代码将保留、可构建、通过基础测试,作为语言特性探索的基线;
- 不再优先扩展 Explorer 的特性覆盖,停止对其大规模 fuzzing 与测试扩充;
- 长期来看,考虑在工具链的Semantics IR之上重建 Explorer 的"抽象机语义执行"能力。
从当前仓库的目录结构可以印证这一转型已经落地:仓库顶层已不存在 Explorer 代码目录,取而代之的是体量庞大的 toolchain 目录(内含 lex、parse、check、sem_ir、lower、driver、codegen、diagnostics 等完整编译器管线模块)。提案中"工具链正快速成熟、其核心架构经受住了考验"的表述,与这一目录结构相互印证。
社区参与:工具缺失成为瓶颈
2023 年 Carbon 团队与 C++ 社区在技术底层问题上进行了更深入的互动,但反馈表明:在拥有(远)更完整的工具之前,外部社区的深度参与难以加深,更难以扩展到更大规模的社区。这一"剩余工作量巨大 + 工具成为外部参与的瓶颈"的组合,直接驱动了 2024 年的优先级排序。
2023 年关键结果逐项盘点
提案将 2023 年的关键结果(key results)逐一拆解如下:
- 明确定义评估用 MVP,即 0.1 语言—— ✅ 完成!对应 milestone-01;
- 完整设计覆盖 0.1 语言必需特性—— 高风险、非互操作特性基本完成;其余特性为工具链与互操作让路,被搁置到次要位置;
- 在 Carbon Explorer 中完整实现 0.1 语言—— 存在微妙之处:只需完成足以验证设计内聚性与行为的设计验证量。团队认为 Explorer 在 2023 年达到了这一目标,随后 全面转向工具链,因此该项"在某种意义上因构造而完成";
- 能构建最小混合 C++/Carbon 程序的工具链—— 未完成。正如 2023 路线图所预告的,团队本就没指望在年底前完成它,这项任务顺理成章地成为 2024 年的核心焦点;
- 在 2~3 场会议上做 3~4 个不同主题的演讲—— 只到达 1 场会议,但覆盖了 3 个以上主题;团队希望工具链更完整后能有更多适合更多会议的主题。
提案对 2023 年的整体定调是:"2023 年相当了不起,我们达成了项目过去一年中一些最重要的里程碑。"
仓库中的实证:互操作的真实形态
2024 路线图目标 3 所说的"互操作本身",在仓库中可以找到具体的、可编译的例证。位于 examples/interop/cpp/ 下的示例展示了互操作在代码层面的真实形态。
以 examples/interop/cpp/hello_world.carbon 为例,Carbon 通过import Cpp library语法直接引入 C++ 标准库头文件,然后像调用本地函数一样调用putchar、puts、write,甚至直接使用Cpp.std.cout <<流式输出:
import Cpp library "<cstdio>"; import Cpp library "<iostream>"; import Cpp library "<string_view>"; import Cpp library "<unistd.h>"; fn HelloStdio() { Cpp.puts(Cpp.std.data("Hello world!\0")); } fn HelloIostreams() { Cpp.std.cout << "Hello world!\n"; }代码中的 TODO 注释(如u8应隐式转换为i32、需要变参函数支持、需要字符串字面量到const char*的转换等)恰好呼应了路线图中"剩余缺口要么风险更低、要么几乎完成"的表述——它们都是互操作成熟度提升过程中仍在逐步补齐的细节。
更复杂的 examples/interop/cpp/socket.carbon 展示了用 Carbon 借助 POSIX 网络 API(socket/bind/listen/accept/read)实现一个监听 8081 端口的 TCP 回显服务,包括通过import Cpp inline '''...'''内联注入 C++ 代码来绕过htons宏限制、以及用unsafe as完成sockaddr_in6*到sockaddr*的类型转换。这两个文件均通过 examples/interop/cpp/BUILD 中的carbon_binary规则构建,是"工具链能在现实构建系统中编译互操作代码"的直接证据。
此外,examples/advent2024/ 目录下积累的 15 天 Advent of Code 解答,也印证了提案发布之后工具链能力的快速爬升——这正是 2024 路线图目标 1(Carbon 侧能构建"有意义代码")的延续性成果。
从 2024 看后续:路线图的连续性
虽然本提案本身只规划到 2024 年,但它的四个目标在仓库后续文档中得到了清晰承接。当前版本的路由图 docs/project/roadmap.md 将 2025 年目标定义为"C++ 互操作演示 + 内存安全设计":
- 访问大部分非模板 C++ API(从 Carbon 侧);
- 在 C++ 中访问非泛型 Carbon API;
- 更新并细化 safety 策略;
- 设计基于编译期类型系统的 temporal(时域)与 mutation(变更)内存安全。
而 proposals/p004880-safety-milestones-and-a-2025-roadmap.md 在对 2024 年的回顾中确认了本提案目标的落地情况:Clang 已集成进工具链、首个 C++ 头文件导入已落地、Core.Int泛型整数类型替代了硬编码的i32、团队在 C++/LLVM 会议上做了 5 场演讲加 1 场小组讨论。这些事实表明,p003564 提出的"聚焦实现的 2024"确实成为项目加速的转折点。
结语:一份为"能跑起来"而写的路线图
p003564提案虽然篇幅精炼,却是 Carbon 项目策略史上的关键转折:它把项目从"设计驱动的探索期"推进到"实现驱动的工具链期",并将 C++ 互操作确立为 0.1 里程碑乃至整个实验成败的支点。理解这份提案,就能理解为什么当前仓库中 toolchain/ 占据了绝对的主体地位、为什么互操作示例被单独陈列在 examples/interop/cpp/、以及为什么后续路线图始终围绕"互操作 + 内存安全"双主线展开。对于想要评估 Carbon 现状或参与贡献的开发者,这份 2024 路线图与 2023 回顾提供了最准确的出发点:它回答了"Carbon 现在在做什么"以及"为什么这么做"。
【免费下载链接】carbon-langCarbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)项目地址: https://gitcode.com/GitHub_Trending/ca/carbon-lang
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考