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负责二进制合法。