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

发布时间:2026/9/10 1:36:06

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),仅供参考
延伸阅读

更多相关文章

2026/9/10 2:26:13

AI率过高如何解决?2026年10款主流降AI率工具终极亲测指南

现在毕业生答辩前的头号难关,早就从“查重率超标”变成“AIGC率踩红线”啦!各大高校检测系统一升级,AI痕迹太明显被标红,那可是答辩路上的“致命关卡”,半点儿都马虎不得。 为啥自己改来改去还是过不了?因…

2026/9/10 2:26:13

SEO总监的真实工作:管理、协作与数据驱动的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 2:21:13

Java面试必问:new String(“abc“)到底创建了几个对象?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码