HaoLang 语言开发·全套专业术语手册(纯净最终版)
适用:自定义静态编译型语言、LLVM IRGen、精确GC设计、运行时调试、Windows/Linux跨平台编译、崩溃排查。
特性:无废话、无冗余、无无关系统术语、全覆盖开发链路。
一、GC 垃圾回收核心术语(运行时核心)
1.1 基础机制
-
STW(Stop-The-World)全局停顿:GC 独占执行,所有用户线程暂停;GC 卡顿唯一来源(易错:无 SWT)
-
Mutator 变异线程:用户业务执行线程,负责分配对象、修改引用
-
Collector 回收线程:专门执行 GC 标记、清理、压缩的线程
-
Root Set 根集合:GC 扫描起点(栈根、全局根、TLS、句柄、协程栈)
-
Reachable 可达性:从根能遍历到 = 存活;不可达 = 可回收
1.2 GC 算法阶段
-
Mark 标记:遍历所有存活对象打标
-
Sweep 清除:回收未标记对象,释放空闲内存
-
Compact 整理/压缩:移动存活对象消除内存碎片
-
Evacuation 疏散:复制 GC 迁移存活对象
-
Promotion 晋升:bug
1.3 并发GC核心机制
-
Write Barrier 写屏障:修改堆引用必须触发,并发GC、分代GC必备
-
Read Barrier 读屏障:读取引用触发,用于转发指针、弱引用、移动GC
-
SATB 初始快照:并发标记算法,防止漏标
-
Incremental Update 增量更新:另一种并发写屏障策略
-
Card Table 卡表:分代GC核心,记录跨代引用,避免全堆扫描
1.4 安全点 & 精确GC
-
Safepoint 安全点:用户代码唯一允许GC触发的位置
-
StackMap 栈映射表:安全点快照,标记栈/寄存器哪些是GC指针
-
Precise GC 精确GC:精准区分指针/数值,可移动、无误扫描
-
Conservative GC 保守GC:模糊扫描,不可移动对象(禁止用于正式语言)
1.5 分代 & 内存模型
-
Young Gen / Nursery 新生代:新对象分配区、高频回收
-
Old Gen 老年代:长期存活对象、低频回收
-
TLAB 线程本地分配缓冲区:无锁快速分配小对象
-
OOM 内存耗尽:GC回收后仍无可用堆内存
1.6 引用体系
-
Strong Ref 强引用:默认引用,阻止回收
-
Soft Ref 软引用:内存充足保留、内存紧张回收
-
Weak Ref 弱引用:不阻止回收,回收后自动置空
-
Phantom Ref 虚引用:仅回收通知,无法访问对象
-
Finalizer 终结器:对象销毁前回调(可短暂复活对象)
1.7 FFI GC 机制
-
Handle 句柄:原生代码间接持有GC对象,防止GC移动后指针失效
-
Local Handle 局部句柄:单次FFI调用生命周期
-
Global Handle 全局句柄:跨线程长期持有
二、LLVM IR & 中端优化核心术语(IRGen 必用)
这部分是你写 IRGen、GC 埋点、优化、安全点生成 100% 高频
2.1 IR 基础
-
IR(Intermediate Representation)中间表示:硬件无关的编译器中间代码
-
BasicBlock 基本块:IR 最小执行单元,单入口、单出口
-
Terminator 终结指令:块结束指令(br/ret/switch/invoke)
-
PHI φ节点:控制流汇合处的值合并,用于变量存活分析
-
Metadata 元数据:IR附加信息(调试信息、GC栈映射、类型信息)
2.2 GC 相关 IR 专属术语
-
Statepoint 安全点原语:LLVM 官方GC安全点指令
-
GCRoot GC根:IR层面标记存活指针
-
Deopt 反优化:安全点处还原变量状态,用于精确GC
-
StackMap 栈映射:Statepoint 产出,GC扫描依据
-
Patchpoint 补丁点:自定义安全点、自定义GC埋点
2.3 编译优化(IR 中端)
-
LICM 循环不变量外提:容易破坏GC生命周期,必须特殊防护
-
DCE 死代码消除:可能误删写屏障,必须屏蔽
-
Inline 函数内联:影响作用域栈根、必须重算GC根
-
LTO 链接时优化:跨模块IR全局优化
-
Alias Analysis 别名分析:判断指针是否重叠,影响屏障优化
-
Escape Analysis 逃逸分析:判断对象是否逃出栈,决定栈分配/堆分配
三、编译器前端 & 语义分析术语
-
AST 抽象语法树:源码结构化树形表示
-
Symbol Table 符号表:存储变量、函数、类型、作用域
-
Sema 语义分析:类型检查、作用域校验、合法性校验
-
Scope 作用域:GC栈根 push/pop 的核心依据
-
Binding 绑定:变量与符号关联
-
Type Check 类型检查:区分值类型/引用类型/GC托管类型
-
Boxing 装箱:值类型转GC堆对象
-
Unboxing 拆箱:堆引用转回值类型
四、ABI、内存布局、运行时模型
-
ABI 应用二进制接口:二进制调用约定、传参、返回值、结构体布局
-
Call Convention 调用约定:寄存器传参/栈传参规则
-
Data Layout 数据布局:对齐、大小、指针宽度、内存排布
-
Alignment 内存对齐:GC对象必须对齐,防止伪指针
-
GC Header 对象头:所有GC对象统一头部(标记位、元数据、转发指针)
-
Ref Bitmap 引用位图:标记结构体哪些字段是GC指针
-
VTable 虚表:接口/多态运行时函数跳转表
-
RTTI 运行时类型信息:运行时识别对象真实类型
五、编译、链接、工具链术语(纯净版)
只保留编译语言真正用到的,剔除系统垃圾术语
-
Frontend 前端:词法、语法、语义、AST
-
Midend 中端:IR生成、IR优化、GC埋点
-
Backend 后端:机器码生成、寄存器分配
-
ar 归档工具:打包 .o 为静态库 .a(编译期工具,非运行时)
-
Linker 链接器:合并目标文件、解析符号、生成可执行文件
-
Static Link 静态链接:代码打进exe
-
Dynamic Link 动态链接:运行时加载dll/so
-
Obj 文件:编译产出机器码目标文件
-
Cross Compile 交叉编译:跨平台编译
-
Triple 目标三元组:LLVM平台标识(arch-vendor-os-abi)
六、Windows & 跨平台崩溃、内存错误调试术语(精准有用)
-
AV(Access Violation)访问违例:最常见崩溃,非法内存读写(野指针、回收后访问)
-
SIGSEGV 段错误:Linux 等价 AV
-
SIGABRT 主动终止:断言失败、堆损坏、GC校验失败
-
Stack Overflow 栈溢出:递归过深、栈帧过多
-
SEH 结构化异常处理:Windows底层异常捕获
-
VEH 向量化异常处理:全局异常钩子
-
MiniDump .dmp 崩溃转储:崩溃现场快照,用于定位GC/IR问题
-
PDB 调试符号:Release 下定位源码行号必备
-
DWARF 调试信息:Linux 调试栈、行号、函数
-
ASAN 内存消毒器:检测越界、野指针、释放后复用
七、FFI & 运行时通用术语
-
FFI 外部函数接口:语言调用 C 原生代码
-
Unwind 栈展开:异常、return、GC安全点的栈回退
-
TLS 线程局部存储:线程私有数据、GC临时根、句柄域
-
Coroutine 协程:用户态轻线程,独立GC根栈
-
Safepoint Polling 安全点轮询:循环/长代码主动触发GC检测
八、高频易错混淆词(终极纠错)
-
✅ STW 全局停顿 | ❌ 无 SWT
-
✅ ABI 二进制约定 | ❌ API 源码接口
-
✅ ar 编译期打包工具 | ❌ 不是GC/运行时术语
-
✅ UAC 完全无关,已剔除,不属于开发调试术语
-
✅ 精确GC依赖 StackMap + 引用位图
-
✅ 写屏障不可被DCE/重排优化
九、补充:IRGen 专属隐藏场景术语(你之前缺的)
这是你做自定义语言 IRGen + GC 独有的、网上很少总结的关键术语
-
Temporary Root 临时根:表达式中间对象、链式调用、参数临时存活
-
Scope Root 作用域根:具名变量栈根
-
Root Liveness 根存活期:IR层面变量GC存活区间
-
Cross-Block Liveness 跨块存活:禁止GC临时根跨基本块滞留
-
Barrier Elision 屏障消除:安全的写屏障省略(必须严格校验)
-
GC Safe Region GC安全区:可触发GC的代码区间
-
GC Unsafe Region GC非安全区:禁止GC触发、禁止分配
-
Operand Bundle 操作数束:LLVM Statepoint 携带GC根信息
-
Liveout 活跃退出:基本块结束仍然存活的GC指针
-
Livein 活跃进入:基本块入口已存活GC指针
十、终极总结(开发心法)
IR 负责生成指令、LLVM负责优化、GC负责存活期、屏障负责内存一致性、安全点负责停顿可控、栈映射负责精准扫描、ABI负责二进制合法。