COMPILER PIPELINE

HP 编译器架构The HP Compiler

hpc 以 C++17 实现,后端基于 LLVM SDK,目标为零运行时、静态分派、编译期求值与极致性能。源码 *.hp → 原生 .exe/.dll/.libhpc is written in C++17 on top of the LLVM SDK — zero-runtime, static dispatch, CTFE, peak performance. *.hp → native .exe/.dll/.lib.

0

驱动与配置层 Driver / ConfigDriver / Config

解析 config.txt 与命令行参数,探测 LLVM / MSVC 工具链,构建含模块依赖图的翻译单元列表。Parses config.txt & CLI, detects the LLVM / MSVC toolchain, builds the translation-unit list with a module-dependency graph.

1

词法分析 LexerLexical Analysis

中英双语关键字、运算符最长匹配、缩进栈生成 INDENT/DEDENT、字面量与 f-string 预解析。Bilingual keywords, longest-match operators, indentation stack → INDENT/DEDENT, literals & f-string pre-parsing.

2

语法分析 Parser → ASTParsing → AST

递归下降 + 运算符优先级爬升(Pratt)+ 缩进驱动,构建函数/结构体/枚举/接口等 AST。Recursive-descent + Pratt precedence climbing + indentation-driven, building the full AST.

3

语义分析 Semantic AnalysisSemantic Analysis

符号解析、类型检查与推断、泛型约束、NLL 所有权/借用检查、CTFE、泛型单态化、属性处理。Name resolution, type checking & inference, generic constraints, NLL borrow-check, CTFE, monomorphization, attributes.

4

中端 Middle-end → HP IRMiddle-end → HP IR

AST 降级为 SSA 形式 HP IR,展开零运行时抽象,执行内联/常量传播/死代码等专属 Pass。AST lowers to SSA-form HP IR, desugars zero-cost abstractions, runs inline / const-prop / DCE passes.

5

后端 LLVM IR 生成 CodeGenLLVM IR CodeGen

HP IR → LLVM IR(C++ API),ABI 布局、胖指针、niche 优化、内联汇编、FFI 与元数据注入。HP IR → LLVM IR (C++ API): ABI layout, fat pointers, niche optimization, inline asm, FFI, metadata.

6

LLVM 优化 Optimization (-O3)LLVM Optimization (-O3)

AggressiveInstCombine、循环向量化、SLPVectorizer、GlobalDCE、Hot/Cold Splitting,可选 LTO / ThinLTO / PGO。AggressiveInstCombine, loop & SLP vectorization, GlobalDCE, Hot/Cold splitting; optional LTO / ThinLTO / PGO.

7

目标代码生成 Target CodeGenTarget CodeGen

指令选择(ISel)、寄存器分配、指令调度、MC 层编码生成目标文件 .objInstruction selection (ISel), register allocation, scheduling, MC encoding → .obj.

8

链接 LinkingLinking

MSVC link.exe 或 LLVM lld 链接标准库 / CRT / 系统库,符号解析、COMDAT 合并,产出最终二进制。MSVC link.exe or LLVM lld links stdlib / CRT / system libs, resolves symbols, merges COMDATs.

命令行参考CLI Reference

bash
hpc [options] <input.hp>...

  -o <file>     输出文件(默认 a.exe)
  -O0/-O1/-O2/-O3 (默认) / -Os / -Oz   优化等级
  -g            生成调试信息 (DWARF)
  -I <dir>      添加模块搜索路径
  -L <dir>      添加库搜索路径
  -l <lib>      链接外部库
  -c            仅编译为目标文件
  -S            仅生成汇编
  -emit-llvm    仅生成 LLVM IR
  -fPIC         位置无关代码(用于 .dll)
  -D <macro>    定义编译期宏 / 条件编译
  -threads N    并行编译线程数
  -pgo-gen      生成 PGO 插桩版本
  -pgo-use      使用 PGO 数据文件
  -flto/-fthin  启用 LTO / ThinLTO
  -v            冗长输出(显示各阶段耗时)

从源码构建Build from Source

build.bat / CMake
# config.txt
llvm sdk 地址: D:\clang+llvm-22.1.8-x86_64-pc-windows-msvc
cl.exe 地址:   D:\msvc\VC\Tools\MSVC\14.51.36231\bin\Hostx64\x64

# CMakeLists.txt
find_package(LLVM 22 REQUIRED CONFIG)
set(LLVM_ENABLE_LLD ON)
set(CMAKE_CXX_STANDARD 20)

# 构建
cmake -B build -S .
cmake --build build --config Release

模块布局Module Layout

include/hpc/ 下分 Lexer / Parser / AST / Sema / Ownership / CTFE / Monomorphizer / HIR / HIRPasses / CodeGen / Target / LinkDriver 等头文件,与 src/ 一一对应,职责清晰。

双语诊断Bilingual Diagnostics

所有 Token、关键字、错误信息均通过「中英映射表」支持双语输出,Diagnostic::error(...).en(...).zh(...) 统一接口。Every token, keyword and diagnostic supports bilingual output via one mapping table and a unified interface.

优化等级矩阵Optimization Matrix

优化标志Flag中端 PassMid Pass向量化VectorizeLTO目标Goal
-O0关闭快速调试debug
-O2标准高质量quality
-O3全部极致(默认)peak (default)
-O3 -fthin全部ThinLTO推荐生产prod
-O3 -flto -pgo全部LTO极致+反馈peak+PGO

里程碑规划Milestones

M0 驱动+词法+诊断 M1 语法+AST+基础语义 M2 类型检查+HP IR+LLVM IR (hello world) M3 所有权/借用+CTFE+单态化 M4 中端优化+LLVM -O3 M5 FFI/内联汇编/SIMD M6 LTO/ThinLTO/PGO M7 ASAN/UBSAN+调试信息+增量编译

亲手编译 HP 源码Compile HP Yourself

下载编译器与示例库,照着教程写出你的第一段 HP 程序。Download the compiler and examples, then write your first HP program following the tutorial.