Mica 是一门系统级编程语言,语法清晰、结构化,并对机器提供显式控制。本术语表
定义编译器各部分使用的核心术语——语言、内存模型、编译流水线、后端、平台与
工具链——以便用中文讨论和撰写关于 Mica 的内容时保持准确。
编译器的权威术语——关键字、错误信息与标识符——均为英文。下表以这些英文术语
作为锚点,为每个条目给出常用的中文译名与一句话说明。本文件是一份持续更新
的文档。
关于一处易混淆的译法。 英文 obligation 在此译为义务——指每次堆分配
所产生、必须被履行的责任,而非财务意义上的“债务/债券”。凡英文术语在中文里
容易引起误解之处,下表均给出贴切的译名。
1 · 语言与类型系统#
| Term (Mica) | 中文 | 说明 |
|---|
| compiler | 编译器 | 将 Mica 源代码一直编译为本机机器码。 |
| systems programming language | 系统级编程语言 | 对内存与机器拥有直接、可见控制的语言。 |
| statement | 语句 | 程序的一个可执行步骤(赋值、循环等)。 |
| expression | 表达式 | 产生一个值的计算。 |
| declaration | 声明 | 引入一个名字(常量、变量、类型、函数)。 |
| record | 记录(类型) | 由具名字段组成的复合类型。 |
| field | 字段 | 记录中的一个具名成员。 |
| array | 数组 | 固定大小、按下标访问的同类元素集合。 |
| set | 集合(类型) | 基于序数类型的数学集合;用成员关系而非位掩码。 |
| enumeration | 枚举(类型) | 具有具名、有序取值的独立类型。 |
| subrange | 子界(子范围)类型 | 取值被限定在某区间内的类型。 |
| generic / type parameter | 泛型 / 类型参数 | 以某个类型作为参数的过程或函数。 |
| capability constraint | 能力约束 | 类型参数必须满足的要求,以能力词(有序、数值、相等……)命名。 |
| ordinal type | 序数类型 | 取值有限、有序且可数的类型。 |
| domain (of a type) | 值域 | 类型的全部合法取值,带有下界与上界。 |
| lower / upper bound | 下界 / 上界 | 值域的最小 / 最大取值。 |
| pointer | 指针 | 指向某内存地址处的值。 |
| to dereference | 解引用 | 读写指针所指向的值。 |
| address-of | 取地址 | 获取一个变量的地址。 |
| nil | nil(空指针) | 可赋值、可比较、指向“无”的指针值。 |
| short-circuit evaluation | 短路求值 | and/or 的右侧仅在必要时才求值。 |
| checked arithmetic | 受检算术 | 在运行时检测并报告整数溢出的模式。 |
| overflow | 溢出 | 超出可表示范围的运算结果。 |
| signed / unsigned | 有符号 / 无符号 | 带 / 不带符号的整数类型。 |
| floating-point | 浮点数 | 符合 IEEE 754 的实数。 |
| boolean | 布尔值 | 取值为假与真的类型。 |
| string | 字符串 | 字符序列;Mica 中默认采用 UTF-32。 |
| code point | 码点 | 单个 Unicode 字符(32 位)。 |
2 · 内存安全与堆#
这是 Mica 5.0.0 的核心:堆内存的安全性在编译期通过流分析加以证明——
无需垃圾回收、无需借用检查器、也无需生命周期标注。
| Term (Mica) | 中文 | 说明 |
|---|
| heap | 堆 | 用于动态申请、生命周期自由的值的内存。 |
| allocation | 分配 | 在堆上申请一块单元(new)。 |
| to free / release | 释放 | 让一块单元重新可用(dispose)。 |
| obligation | 义务 | 每次分配都会产生一项义务,必须在每条路径上被履行。 |
| to discharge (an obligation) | 履行(义务) | 履行义务——通过 dispose、绑定到某所有者,或返回该指针。 |
| contract | 契约 | 每项义务都必须在每条路径上被履行的规则;否则程序无法编译。 |
| owner | 所有者 | 每次分配在任一时刻都恰好有一个所有者;所有者生命终结时释放该内存。 |
| ownership | 所有权 | 对释放某单元所负的责任。 |
| owner-bound | 绑定所有者的 | 其释放绑定到所有者生命终结的分配。 |
| lifetime | 生命周期 | 单元可被合法使用的时间跨度。 |
| lifetime class | 生命周期类别 | 对每个分配点的四种归类之一(见下四行)。 |
| transferred | 已转移 | 义务经由返回值离开本函数;由调用者继续承担。 |
| manual-verified | 手动已验证 | 某个 dispose 在每条被追踪的路径上履行义务——可证明无泄漏。 |
| manual-unverified | 手动未验证 | 指针逸出了分析的追踪范围;义务被指出但不被强制。 |
| region | 区域 | 按所有者划分的竞技场内存:线性填充,所有者退出时整体释放。 |
| region allocator | 区域分配器 | 实现区域的分配器:在区域内通过递增指针进行分配,并在所有者生命终结时一次性回收整个区域。 |
| region-based memory management | 基于区域的内存管理 | 按块申请内存并整体释放,而非逐个单元释放。 |
| obligation analysis | 义务分析 | 对每个分配点归类并证明泄漏的数据流分析。 |
| garbage collection | 垃圾回收 | 在运行时自动回收不可达内存的技术——Mica 有意不采用。 |
| borrow checker | 借用检查器 | Rust 基于类型的生命周期检查——在 Mica 中由流分析取代。 |
| memory leak | 内存泄漏 | 已分配却从未释放的内存。 |
| silent leak | 静默泄漏 | 未被察觉的泄漏;在 Mica 中,被完整追踪的泄漏无法表达。 |
| use-after-free | 释放后使用 | 对已释放内存的错误访问。 |
| double-free | 重复释放 | 对同一单元错误地释放两次。 |
| dangling pointer | 悬空指针 | 指向不再有效内存的指针。 |
| defer | defer(延后执行) | 在函数退出时执行一条语句——一种清理守卫。 |
| escape | 逸出 | 指针离开了分析能够追踪的程序范围。 |
| provenance | 来源(指针来源) | 指针属于 Mica 自有还是外来(来自 C);释放外来指针会产生编译错误。 |
| memory narration | 内存叙述 | 编译器对每次分配的报告:所有者、已证明的生命周期类别,以及所选用的分配器。 |
| allocator | 分配器 | 真正提供堆内存的组件。 |
| bump allocator / arena | 指针递增分配器 / 竞技场 | 通过递增指针进行分配;整体释放。 |
| fixed arena | 固定竞技场 | 静态预算、其后没有操作系统堆的内存区——面向嵌入式目标。 |
| plug-in | 插件 | 隐藏在固定接口之后、可替换的分配器。 |
| compile-time / runtime | 编译期 / 运行期 | 在编译期间 / 在执行期间。 |
3 · 编译流水线#
| Term (Mica) | 中文 | 说明 |
|---|
| scanner / lexer | 扫描器 / 词法分析器 | 将源代码切分为词法单元。 |
| token | 词法单元(标记) | 源文本中最小的有意义单位。 |
| parser | 语法分析器 | 由词法单元构建语法树。 |
| recursive descent | 递归下降 | 一种沿文法进行、易读的语法分析技术。 |
| abstract syntax tree (AST) | 抽象语法树(AST) | 解析之后程序的树状表示。 |
| semantic analysis | 语义分析 | 检查名字、类型与规则;折叠常量。 |
| pass | 趟(遍) | 一个独立的分析或变换步骤。 |
| constant folding | 常量折叠 | 在编译期就对常量表达式求值。 |
| lowering | 下降(lowering) | 转换为更接近机器的表示。 |
| intermediate representation (IR) | 中间表示(IR) | 介于语法树与机器码之间的扁平形式。 |
| three-address code | 三地址码 | 每个操作至多三个操作数的 IR 形式。 |
| Spectra | Spectra | Mica 的中间语言:一种带类型的三地址中间表示。 |
| monomorphization | 单态化 | 泛型的编译方式:为每一组不同的类型实参生成一份具体的特化代码。 |
| string fusion | 字符串融合 | 将链式拼接(s1 + s2 + s3)下降为单次定长分配,不产生中间临时值。 |
| activation record / stack frame | 活动记录 / 栈帧 | 一次函数调用的内存框架。 |
| static link | 静态链 | 嵌套函数借以访问其外层作用域的引用。 |
| nested function | 嵌套函数 | 定义在另一函数内部的函数。 |
| scope | 作用域 | 名字可见的程序区域。 |
4 · 后端与代码生成#
| Term (Mica) | 中文 | 说明 |
|---|
| control-flow graph (CFG) | 控制流图(CFG) | 将程序表示为基本块及其之间的边。 |
| basic block | 基本块 | 单入口、单出口的顺序指令序列。 |
| static single assignment (SSA) | 静态单赋值(SSA) | 每个值恰好被赋值一次的形式。 |
| dominance / dominator | 支配 / 支配结点 | 若到达某块的每条路径都经过另一块,则后者支配前者。 |
| dominance frontier | 支配边界 | 插入 φ 函数的位置。 |
| liveness | 活跃性(分析) | 在某一点上仍被需要的值。 |
| live range | 活跃区间 | 某个值保持活跃的跨度。 |
| reaching definitions | 到达定义 | 能够到达某一点的赋值。 |
| dataflow analysis | 数据流分析 | 沿控制流计算程序性质的技术。 |
| inlining | 内联 | 将小函数的函数体代入调用点。 |
| register allocation | 寄存器分配 | 将值分配到机器寄存器或栈槽。 |
| graph coloring | 图着色 | 一种寄存器分配方法。 |
| spill | 溢出(到栈) | 因寄存器不足而将值移到栈中。 |
| peephole optimization | 窥孔优化 | 在很小的指令窗口内进行的局部优化。 |
| instruction selection | 指令选择 | 将 IR 操作映射到机器指令。 |
| calling convention | 调用约定 | 传递参数与返回值的规则。 |
| ABI (application binary interface) | 应用二进制接口(ABI) | 已编译程序所遵循的二进制接口。 |
| executable | 可执行文件 | 可运行的程序(ELF)。 |
| static library / archive | 静态库(归档) | 供链接使用的已编译单元集合。 |
| shared object | 共享对象(动态库) | 可在运行时加载的库。 |
| debug information (DWARF) | 调试信息(DWARF) | 让调试器将源代码、类型与变量对应起来的数据。 |
| assembler / linker | 汇编器 / 链接器 | Mica 用以生成二进制文件的 GNU 工具。 |
5 · 平台与互操作#
| Term (Mica) | 中文 | 说明 |
|---|
| contract | 契约 | 对某个 C 库的 JSON 描述,用于受检调用。 |
| interoperability | 互操作性 | Mica 代码与 C 代码顺畅协作。 |
| foreign function interface (FFI) | 外部函数接口(FFI) | 访问其他语言的函数——在 Mica 中通过契约实现。 |
| standard library | 标准库 | 随附的运行时与输入输出基础设施。 |
| format string | 格式化字符串 | 输入输出的模板;在编译期被检查。 |
| type fingerprint | 类型指纹 | 用以检测不同编译单元间类型不一致的摘要。 |
| cross-compilation | 交叉编译 | 为不同于宿主的目标架构进行构建。 |
| target | 目标(平台 / 架构) | 所要构建的操作系统与指令集。 |
| encoding | 编码 | 目标的字符编码(UTF-32 或 UTF-8)。 |
6 · 工具与质量#
| Term (Mica) | 中文 | 说明 |
|---|
| test harness | 测试框架 | 编译、运行并检查每个测试用例的工具。 |
| test case | 测试用例 | 由清单描述的单个检查。 |
| manifest | 清单 | 对一个测试用例的描述(源文件、预期输出)。 |
| regression test | 回归测试 | 将已达成的行为长期固定下来的测试。 |
| quality gate | 质量门 | 检查编译器自身各项变换的内部检查。 |
| stress test | 压力测试 | 使用特别大输入的测试。 |
| benchmark | 基准测试 | 用于性能对比的测量。 |
| retired instructions | 退役指令 | 实际执行完成的机器指令——确定性的性能度量。 |
| wall-clock time | 挂钟时间(实际时间) | 一次运行所经过的真实时间。 |
另见:本术语表的英文版与德文版,以及 Mica 的技术画像(英文)。