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取地址获取一个变量的地址。
nilnil(空指针)可赋值、可比较、指向“无”的指针值。
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悬空指针指向不再有效内存的指针。
deferdefer(延后执行)在函数退出时执行一条语句——一种清理守卫。
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 形式。
SpectraSpectraMica 的中间语言:一种带类型的三地址中间表示。
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 的技术画像(英文)。