FEATURED · 精选文章

Carbon Language 表达式阶段术语体系:从 value phase 到 expression phase 的规范化设计

发布时间 / 2026/9/10 1:35:59
来源 / 创域科博编辑部
栏目 / 资讯中心
Carbon Language 表达式阶段术语体系:从 value phase 到 expression phase 的规范化设计 Carbon Language 表达式阶段术语体系从 value phase 到 expression phase 的规范化设计【免费下载链接】carbon-langCarbon Languages 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/p002964-expression-phase-terminology.md系统梳理 Carbon 围绕表达式阶段expression phase建立的术语体系包括value phase → expression phase、symbolic value → symbolic constant、constant → template constant、constant or symbolic value → constant四项术语更新以及与之配套的三种表达式阶段模板常量、符号常量、运行时值的完整定义、绑定模式对应关系与自动转换规则。读完本文你将能够准确理解 Carbon 文档与源码中出现的 template constant、symbolic constant、runtime value 等核心概念掌握它们与runtime/generic/template三种参数绑定之间的映射关系并在阅读 docs/design/README.md、docs/design/generics/terminology.md 等设计文档时不再被术语混淆困扰。为什么需要更新术语问题与背景表达式阶段术语当时称 value phase值阶段最早由 proposals/p002200-template-generics.md 体系下的术语引入其名称选定过程本身存在妥协在引入时团队对新名称并不完全满意但为了不阻塞当时的提案决定先合入再迭代。随着设计演进旧术语暴露了三个层面的问题最终推动了本次术语更新对应 proposals/p002964-expression-phase-terminology.md 的 Problem 章节命名对象错位这是表达式的属性不是值的属性。术语描述的实际上是表达式在其求值阶段上的分类属性而值阶段value phase这个叫法容易让人误以为该属性属于值本身。这与 Carbon 同时期将值类别value categories更名为表达式类别expression categories的理由完全一致——同一轮概念清理的一部分。单个阶段的名称缺乏辨识度。constant常量一词过于笼统无法与symbolic value符号值形成清晰的对照关系团队甚至需要一个专门的问题来讨论它的新名字。缺少一个统称。对于使用:!语法声明的编译期绑定compile-time bindings旧术语体系中没有一个好词能把它们统一指代而这类绑定共享大量属性文档中经常需要集体引用。上述单个阶段命名问题最终汇聚为 leads issue #1391New name for constant value phase本提案正是对 issue #1391 决议的实现。核心变更四项术语替换对照本提案的核心是对表达式属性相关术语做四项系统替换用更精确的词汇消除歧义旧术语新术语变更理由value phaseexpression phase该属性属于表达式而非值与 value categories → expression categories 的改名保持同频symbolic valuesymbolic constant指符号化的编译期值如 checked-generic 参数强调其常量本质constanttemplate constant限定为类型检查期间值即可用的编译期常量如字面量、template参数constant or symbolic valueconstant两个以 constant 结尾的术语合称覆盖所有编译期常量场景其中最后两项的设计尤其巧妙让symbolic constant和template constant都以 constant 结尾后它们的并集即所有编译期值就可以自然地被统称为constant常量。例如任何一种常量模板常量或符号常量都可以作为参数传递给任何一种常量绑定template绑定或 checked generic 绑定的形参——这一用法贯穿 docs/design/generics/overview.md 等后续设计文档。三大表达式阶段模板常量、符号常量与运行时值术语更新后的权威定义收录在 docs/design/README.md 的 Expression phases 章节。值表达式value expressions被进一步细分为三种表达式阶段模板常量template constant在编译期即已知值并且该值在类型检查type checking期间就可用例如可以用作数组的大小。典型成员包括字面量整数字面量、浮点字面量、字符串字面量分别参见 docs/design/README.md 中的 Integer literals、Floating-point literals、String literals 小节具体类型值如f64或Optional(i32*)由常量组成的表达式template参数的值。符号常量symbolic constant值要到代码生成code generation阶段的单态化monomorphization时才能确定但在类型检查期间不可知。典型成员包括checked-generic 参数带符号常量参数的类型表达式如Optional(T*)。由于值在类型检查时未知依赖符号常量的表达式无法在定义处完成完整的类型检查这对应 docs/design/generics/terminology.md 中早期类型检查early type checking所覆盖的场景之一——运行时值和符号常量的表达式都在定义编译时进行类型检查而模板相关的依赖值则属于晚期类型检查late type checking。运行时值runtime value仅在运行时才具有动态值的表达式阶段对应普通运行时绑定。编译期常量对前两者的统称模板常量和符号常量被合称为编译期常量compile-time constants并与编译期参数compile-time parameters的声明相对应。这一点在 docs/design/values.md 中也有印证每个值表达式都携带一个表达式类别、一个表达式阶段以及一个可选的常量值当且仅当表达式阶段不是 runtime 时存在。表达式阶段与参数绑定模式的对应关系表达式阶段的划分并非孤立概念它与 Carbon 的参数绑定模式binding patterns一一对应。根据 docs/design/generics/terminology.md 的 Bindings 章节存在三种绑定模式分别对应三种表达式阶段绑定模式绑定的表达式阶段说明runtime binding pattern运行时绑定模式运行时值显式函数参数的默认方式checked generic binding patternchecked generic 绑定模式符号常量推导参数列表[]与编译期实体如interface、class参数的默认方式关联常量associated constants只允许这种绑定template generic binding patterntemplate generic 绑定模式模板常量通过template关键字显式指定永不是默认方式这三种模式分别用runtime、generic、template关键字在需要时覆盖上下文默认值关键字与上下文默认值相同时不允许重复标注以保证一致性。一个函数可以同时混用运行时参数、checked generic 参数与 template generic 参数详见 docs/design/generics/overview.md 的 A function can have a mix of checked, template, and runtime parameters 说明。在 docs/design/pattern_matching.md 的模式匹配设计中同样沿用了这套对应关系checked generic 绑定模式绑定符号常量template generic 绑定模式绑定模板常量。阶段之间的自动转换规则三种阶段之间存在明确的自动转换路径docs/design/README.md 用一张 mermaid 图描述template constant → symbolic constant → runtime value reference expression → runtime value具体规则如下模板常量可转换为符号常量也可转换为运行时值。例如把已知值传入需要符号常量的 checked generic 绑定场景。符号常量通常会转换为运行时值当对它执行了会检查值inspects the value的操作时。运行时值可转换为模板常量或符号常量前提是对该运行时表达式进行常量求值constant evaluation成功。需要说明的是此转换方向在文档中被标注为provisional临时性约定。这一值可用性逐级放宽的模型编译期完全可知 → 单态化时可知 → 运行时才知道是整个阶段体系运转的核心。术语在函数调用与类型检查中的实际运用术语更新后表达式阶段在调用约定与类型检查中承担了可操作的角色。以 docs/design/functions.md 中直接调用的参数检查流程为例在逐一处理显式参数列表的绑定并替换推导出的参数值时若形参是template绑定实参表达式会被转换为与绑定同类型、且为模板常量表达式阶段的表达式若形参是 checked generic 绑定实参表达式会被转换为与绑定同类型、且为符号常量表达式阶段的表达式其余情况则对实参进行模式匹配。随后若形参是编译期绑定其转换后的实参表达式会被求值并把值加入推导参数值列表供后续参数使用。这印证了术语更新中的论断任何一种常量都可以传递给任何一种常量绑定——模板常量在需要时自动提升为符号常量。从后续设计文档的延续使用来看这套术语已经成为 Carbon 泛型设计的公共语言docs/design/generics/overview.md 明确允许把符号常量或模板常量值传给 checked 或 runtime 参数docs/design/expressions/member_access.md 用非负模板常量描述元组索引的下标约束用涉及该绑定的符号常量描述成员访问结果的阶段docs/design/generics/details.md 在讨论实例化细节时引入符号常量T并说明T的使用在特定上下文中表现为模板常量docs/design/variadics.md 中的元组索引规则同样以整数模板常量作为下标前置条件。这些文档共同表明本次提案不仅是纸面上的改名术语更新已经落到了设计文档的实际措辞与语义规则中。设计理性清晰一致、降低学习门槛在 Rationale 章节提案明确了本次术语更新的两大目标更清晰、更简洁的沟通消除 constant 与 symbolic value 之间不成体系的叫法让每个术语都指向一个无歧义的概念让学习 Carbon 更容易术语体系的内部一致性两个编译期阶段都以 constant 收尾、可统一简称 constant降低了初学者的认知负担。这与 Carbon 项目目标中 Code that is easy to read, understand, and write代码易读、易理解、易编写直接呼应。提案在 Alternatives considered 章节也说明团队对这一方案满意未再花费时间寻找更多备选命名。术语体系的后续演进表达式阶段术语体系并未停留在本提案而是持续迭代。后续提案 proposals/p003162-reduce-ambiguity-in-terminology.mdReduce ambiguity in terminology在 docs/design/README.md 的 Expression phases 章节引用中紧随其后继续对术语体系做歧义消减docs/design/README.md 的参考文献列表同时收录了 Template generics#2200、Expression phase terminology#2964与 Reduce ambiguity in terminology#3162三个提案可以作为按时间线追踪该术语体系演进的入口。深入阅读指引若要进一步研究表达式阶段在 Carbon 中的完整设计建议按以下顺序阅读仓库中的相关文档docs/design/README.md表达式阶段的权威定义与阶段转换图本提案术语的主要落地位置docs/design/values.md值、变量、指针与引用的完整语义其中表达式类别与表达式阶段的并列关系每个值表达式同时具有类别、阶段与可选常量值docs/design/generics/terminology.md绑定模式与表达式阶段的完整映射表docs/design/functions.md直接调用时实参到绑定表达式阶段的转换规则docs/design/generics/overview.mdchecked/template/runtime 三类参数混用与常量传递规则proposals/p002200-template-generics.md模板泛型体系的设计源头旧的 value phase 术语即由此引入proposals/p003162-reduce-ambiguity-in-terminology.md术语体系的后续歧义消减提案。结语表达式阶段术语的更新是 Carbon Language 在命名即设计理念下的一次小而关键的修正它纠正了值阶段与表达式类别之间的概念错位用template constant与symbolic constant两个对称术语搭建了编译期常量概念的完整框架并让constant成为覆盖全部编译期场景的统一简称。理解这组术语是阅读 Carbon 泛型设计、函数调用约定乃至后续类型系统演进提案的前提——它们如今已遍布 docs/design 的各类设计文档成为 Carbon 社区沟通的共同语言。【免费下载链接】carbon-langCarbon Languages 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),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻