Carbon 2021 路线图解读:从实验到可执行证据的加速路径
2026/9/10 16:46:18 网站建设 项目流程

Carbon 2021 路线图解读:从实验到可执行证据的加速路径

【免费下载链接】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/p000253-2021-roadmap.md,完整解读 2021 年的项目目标、关键结果(Key Results)与后续年度规划,并结合当前仓库中的源码实现(C++ 互操作示例、编译阶段基准测试等)进行纵深印证。读完本文,你将理解 Carbon 如何用"可执行的证据"而非口号来检验一门编程语言的成败,也能看到当年路线图中的每一项规划在当前仓库中的落地痕迹。

为什么 2021 对 Carbon 至关重要

2021 年是 Carbon 项目仍处于实验且非公开阶段的年份。文档开篇即明确:2021 年的总体目标是加速 Carbon 的开发进程,即使项目当时仍然是一个实验品、仍然保持私有状态。这需要同时改进两个维度:

  • 增加现有个人与组织的投入力度——让已经参与的人投入更多;
  • 扩大参与的个人与组织的广度——让更多不同类型的人和组织参与进来。

文档指出,实现这一目标的主要手段是让 Carbon 的设计变得更具体、更具清晰易懂的价值主张。因此,当年的关键结果(Key Results)主要围绕一系列"具体产物"展开——这些产物被看作支撑 Carbon 开发规模化扩张的关键抓手。同时,项目也明确需要在 2021 全年持续识别关键缺失的参与者并完成 onboarding。

这一思路与 docs/project/roadmap.md 一脉相承:Carbon 后续每一年的路线图(例如 2025 年的"C++ 互操作演示 + 内存安全设计")都延续了"用具体可验证的产物驱动进展"的规划范式。

2021 年的四项关键结果

文档认为有若干里程碑处于"达成年度主目标的临界路径"上,并为项目指明具体的聚焦领域。它们分别是:

  1. 拓宽核心团队构成,使任何单一组织占比不超过 50%;
  2. 将 C++ 库移植到 Carbon(woff2 移植 100%,RE2 移植 99%);
  3. 核心功能的 Demo 实现,附带可运行的示例;
  4. 核心功能的可执行语义规范,附带测试用例。

下面逐一展开。

关键结果一:核心团队多元化,任何组织占比不超过 50%

文档设定的目标非常具体:没有任何单一组织在核心团队中占比超过 50%。其目的在于确保 Carbon 的演进过程中纳入尽可能广泛、有代表性的视角,避免单一公司主导语言设计方向。

文档的 Rationale 部分特别强调:扩大核心团队中非 Google 成员的占比,既是构建"开放、包容社区"的重要指标(indicator),也是其使能条件(enabler),更关系到项目能否拥有足够广泛的用户基础去取得成功。这一指标后来也延续到 docs/project/milestones.md 中关于独立开源组织治理的长期规划里。

关键结果二:C++ 库移植示例(woff2 100%、RE2 99%)

这一关键结果包含两部分:

  • woff2 完整移植:将 woff2 库的全部代码移植到 Carbon,并以导出相同 C++ API的方式呈现。由于 woff2 的 C++ API 非常简单、使用的 C++ 语言特性极少,文档要求这个移植不允许有缺口
  • RE2 大规模移植:RE2 是更大的库,使用了显著更多的语言特性。对这一部分,要求 RE2 中少于 1% 的 C++ 代码行缺失有语义意义的 Carbon 移植

文档特别强调了一个重要细节:这个目标不包含构建完整的 Carbon 标准库,最多只涉及最基本的必要类型。其意图是通过复用 C++ 标准库来检验和展示 Carbon 的互操作层,同时向 woff2 和 RE2 的现有 API 导出兼容的 C++ API。换句话说,这次移植的本质是"用 C++ 生态检验 Carbon 的互操作设计",而非"从零构建独立标准库"。

文档还坦承:woff2 和 RE2 的选择带有一定任意性,完全可以用其他更有效的库替换,其根本目的是证明 Carbon 具备一整套有说服力的、自洽的设计以及总体价值主张

语言设计需覆盖示例移植代码的语法与语义

作为该关键结果的子项,文档要求:对示例移植代码所使用的语法和语义有清晰的理解。这应包括已接受的提案,但并不强制要求形式化规范或实现落地。

仓库印证:当前仓库中保留着 RE2 互操作的实际示例 examples/re2_playground/re2_playground.carbon,它以非常直观的方式展示了当年路线图所规划的互操作形态——直接导入 C++ 头文件并在 Carbon 中调用:

import Cpp library "llvm/LineEditor/LineEditor.h"; import Cpp library "llvm/Support/raw_ostream.h"; import Cpp library "re2/re2.h"; import Cpp inline "using OptionalString = std::optional<std::string>;"; import Cpp inline "std::string_view AsStringView(const std::string &s) { return s; }";

示例中还展示了如何用extend adapt适配 C++ 的re2::RE2类,把 C++ 类型"包装"成 Carbon 原生类型:

class RE2 { extend adapt Cpp.re2.RE2; fn Make(re: str) -> Self { return RE2(re) as Self; } fn Match(self, text: str) -> bool { return FullMatch(text, self as Cpp.re2.RE2); } }

这正体现了 2021 路线图所倡导的互操作理念:复用 C++ 标准库与既有库,通过import Cpp层的桥接,让 Carbon 代码直接调用 C++ API,同时保持 Carbon 一侧的语法体验。impl str as Core.ImplicitAs(Cpp.llvm.StringRef)这种为str实现到 C++ 类型隐式转换的写法,也是"导出兼容 C++ API"设计的具体落地。

关键结果三:核心功能的 Demo 实现,附带可运行示例

文档要求:一组 Carbon 核心特性应被实现到足以构建并成功运行这些特性的示例的程度。清单如下:

  • 用户定义类型、函数、命名空间、包与导入(importing);
  • 使用接口(interfaces)的基本泛型函数与类型;
  • 安全检测的初步/简化实现,至少包括边界检查(bounds checking)、简单生命周期检查(lifetime checking)、简单初始化检查(initialization checking)
  • 足以让可选类型(optional)建模空指针的和类型(sum types)
  • 足以支持基于类型与元数(arity)的基本函数重载、以及 guard 语句中对可选类型解包的模式匹配(pattern matching)

在达成上述目标的前提下,延伸目标(stretch goal)是:

  • 通过互操作层实例化一个基本的 C++ 模板,供 Carbon 内部使用——这直接预示了后来 docs/project/milestones.md 中"C++ 模板导入并基于 Carbon 类型实例化"的 0.1 里程碑规划。

此外,Demo 实现还应提供语言特性之外的演示

  • 编译各阶段(词法分析 lexing、语法分析 parsing 等)的基础基准测试(benchmarking)
  • 一个基本的 REPL 命令行

达成上述目标后,进一步的延伸目标包括:

  • 在实现基础设施之上构建自动代码格式化器(automatic code formatter)
  • 集成 REPL 的 compiler explorer 分支

文档特别澄清了此阶段基准测试的定位:不要求包含大规模优化,而是聚焦于让团队在阶段开发或功能添加过程中追踪不同编译阶段的大粒度/高层级影响;它们也有助于初步展示实现的高层性能特征,但长期重点应放在端到端的用户指标上。至于自动格式化,文档认为应确保语言和实现都能支持格式化这类用例

仓库印证:编译阶段基准测试如今已落地为 toolchain/benchmarking 目录下的真实实现。以 toolchain/benchmarking/compile_benchmark.cpp 为例,它专门"按编译阶段"(Phase::LexPhase::ParsePhase::Check)对 Carbon 与 C++ 源码进行变规模基准测试,并提供两种驱动模式:

  • InProcess:直接以内存文件系统驱动编译器库,测量库内各阶段开销;
  • Subprocess:执行已安装的编译器二进制,捕获包含进程启动在内的端到端命令行成本

该目录下还有 toolchain/benchmarking/source_gen.cpp(用于按规模生成测试源码)、toolchain/benchmarking/prelude_benchmark.cpp,以及 toolchain/lex/tokenized_buffer_benchmark.cpp、toolchain/lex/numeric_literal_benchmark.cpp 等针对单个阶段的词法基准。可以说,"追踪各编译阶段大粒度影响"这一 2021 年的设想,已经演进成一套可运行、可扩展的基准测试基础设施。

关键结果四:核心特性的可执行语义规范,附带测试用例

这一关键结果要求同时具备:

  • 形式语义的人类可读渲染(human readable rendering)
  • 一个执行环境,能在这些语义之上运行测试用例。

语义需要覆盖的核心特性如下:

  • 用户定义类型、函数、命名空间、包与导入;
  • 使用接口的基本泛型函数与类型;
  • 足以让 optional 建模空指针的和类型。

值得注意的是,文档明确说明这刻意是 Demo 实现特性集的子集,其意图是反映优先级判断:规范中"完成全部特性覆盖"的优先级略低,团队应优先尽可能快速地把 Demo 打磨完整,之后再回头补齐语义覆盖。这种"先跑通、再精化"的节奏,是理解 Carbon 早期研发策略的关键。

2021 之后的长期规划

文档强调,长期目标难以精确锁定且随时会变,但 2021 年的目标与优先级需要为后续年份指明大方向。以下是文档给出的逐年展望。

潜在 2022 目标:完成 0.1 语言,转为公开

文档预计 2022 年某个时点,实验需要转为公开,从而显著扩大直接参与和贡献的人群,也扩大能评估并反馈的人群。文档同时明确:Carbon 不会在公开之前、以及收集并吸纳行业与社区足够多反馈之前,脱离实验状态。届时还需要拓宽范围:

  • 扩展标准库,至少覆盖**自托管(self hosting)**所需的一切;
  • 开发初始的 C++ 到 Carbon 迁移工具

潜在 2023 目标:完成 0.2 语言,结束实验

当 Carbon 进展加快并获得公开反馈后,应当能够终结实验:判断这一方向是否足够大范围的行业与社区所认可、价值主张是否胜过成本。但文档也冷静指出,即使实验成功结束,把 Carbon 打磨成生产级语言仍有大量工作。此阶段可能出现的具体目标:

  • 自托管工具链,包括足够的 Carbon 标准库支持;
  • 扩展标准库设计,至少方向性地覆盖关键复杂领域,例如并发/并行网络/IO
  • 足以用于真实世界库与系统的迁移工具,可用于辅助自托管,也可供早期采用者评估 Carbon。

潜在 2024-2025 目标:发布 1.0 语言与组织

一个重要里程碑是第一个生产版本语言,同时应完成将 Carbon 的全部治理移交给独立开源组织。文档也承认,在更接近之前,无法知道这些里程碑更现实或更清晰的日程。这一时间框架的另一个重要方面是扩展目标以涵盖更广泛的语言生态

  • 端到端的开发者工具与体验;
  • 教学与培训材料;
  • 包管理;
  • 等等。

仓库印证:这一长期规划在 docs/project/roadmap.md 与 docs/project/milestones.md 中得到了延续与细化。例如,当前路线图将 0.1 定义为"可供评估的最小可行产品(MVP)",并把"导入 C++ 模板、基于 Carbon 类型实例化""C++ 与 Carbon 双向继承""std::optional/std::variant互操作"等写入语言特性清单;而 0.2 里程碑则明确推迟内存安全、协程/async、Carbon 原生线程、SIMD、内联汇编等特性,1.0 里程碑进一步推迟包管理策略、语言演进战略、生产级开发者体验等。这些都与 2021 路线图中"0.1 语言""0.2 语言""1.0 语言与组织"的分阶段设想完全对应。

规划的理由:为什么用"可执行的证据"驱动开发

文档在 Rationale 部分坦诚地承认:规划文档本身并不能直接推进 Carbon 的目标,但它认为这份路线图能有效让团队聚焦于能产出具体证据的工作,从而判断 Carbon 是否有可能成功——并在不成功时及时纠偏。其逻辑链条是:

  • 核心团队的多元化是构建"开放包容社区"、乃至拥有足够广泛用户基础的重要指标与使能条件;
  • 示例移植(woff2/RE2)、Demo 实现与可执行语义,能帮助团队具体地评估 Carbon 在多大程度上达成各项语言目标
  • 具体证据反过来会间接加速进展——它证明了 Carbon 可以成功,从而激励更多投资;
  • 其中一些方面还会直接加速开发:可执行语义实现能让贡献者快速原型化潜在新特性,在更早阶段发现并解决更多问题,对采纳的提案建立更高信心。

文档最后给出了一个非常直白而深刻的判断:虽然"快速进展"并非 Carbon 项目的显式目标,但 Carbon 在以一种可用形态存在之前,无法达成任何其他目标;达到这一点的耗时越长,达成它的可能性就越低。这正是 2021 路线图将"加速开发"作为年度总目标、并以四组可验证产物作为关键结果的根本原因。

结语:从 2021 路线图看 Carbon 的演进脉络

回看 proposals/p000253-2021-roadmap.md,可以清晰提炼出 Carbon 项目早期的三条核心方法论:

  1. 以具体产物定义成功:年度目标(加速开发)被拆解为"团队构成比例、移植覆盖率、Demo 可运行性、语义可执行性"这样可度量的关键结果,而不是模糊的口号;
  2. 以互操作检验设计:不急于构建完整标准库,而是通过移植真实 C++ 库(woff2、RE2)来倒逼语言设计与实现成熟——这一思路至今仍体现在 examples/re2_playground/re2_playground.carbon 的import Cpp互操作示例中;
  3. 分阶段、留余地的长期规划:2021 → 2022(0.1 语言、公开)→ 2023(0.2 语言、结束实验)→ 2024-2025(1.0 语言与组织)的阶梯式展望,为后续 docs/project/roadmap.md 与 docs/project/milestones.md 的细化迭代提供了初始框架。

对于希望深入了解 Carbon 项目规划机制与演进历史的读者而言,这篇 2021 路线图提案既是研究其目标管理体系的第一手材料,也是对照当前 toolchain/benchmarking 等实现成果、观察"规划如何变成代码"的绝佳起点。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询