hpc 以 C++17 实现,后端基于 LLVM SDK,目标为零运行时、静态分派、编译期求值与极致性能。源码 *.hp → 原生 .exe/.dll/.lib。hpc is written in C++17 on top of the LLVM SDK — zero-runtime, static dispatch, CTFE, peak performance. *.hp → native .exe/.dll/.lib.
解析 config.txt 与命令行参数,探测 LLVM / MSVC 工具链,构建含模块依赖图的翻译单元列表。Parses config.txt & CLI, detects the LLVM / MSVC toolchain, builds the translation-unit list with a module-dependency graph.
中英双语关键字、运算符最长匹配、缩进栈生成 INDENT/DEDENT、字面量与 f-string 预解析。Bilingual keywords, longest-match operators, indentation stack → INDENT/DEDENT, literals & f-string pre-parsing.
递归下降 + 运算符优先级爬升(Pratt)+ 缩进驱动,构建函数/结构体/枚举/接口等 AST。Recursive-descent + Pratt precedence climbing + indentation-driven, building the full AST.
符号解析、类型检查与推断、泛型约束、NLL 所有权/借用检查、CTFE、泛型单态化、属性处理。Name resolution, type checking & inference, generic constraints, NLL borrow-check, CTFE, monomorphization, attributes.
AST 降级为 SSA 形式 HP IR,展开零运行时抽象,执行内联/常量传播/死代码等专属 Pass。AST lowers to SSA-form HP IR, desugars zero-cost abstractions, runs inline / const-prop / DCE passes.
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.
AggressiveInstCombine、循环向量化、SLPVectorizer、GlobalDCE、Hot/Cold Splitting,可选 LTO / ThinLTO / PGO。AggressiveInstCombine, loop & SLP vectorization, GlobalDCE, Hot/Cold splitting; optional LTO / ThinLTO / PGO.
指令选择(ISel)、寄存器分配、指令调度、MC 层编码生成目标文件 .obj。Instruction selection (ISel), register allocation, scheduling, MC encoding → .obj.
MSVC link.exe 或 LLVM lld 链接标准库 / CRT / 系统库,符号解析、COMDAT 合并,产出最终二进制。MSVC link.exe or LLVM lld links stdlib / CRT / system libs, resolves symbols, merges COMDATs.
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 冗长输出(显示各阶段耗时)# 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 Releaseinclude/hpc/ 下分 Lexer / Parser / AST / Sema / Ownership / CTFE / Monomorphizer / HIR / HIRPasses / CodeGen / Target / LinkDriver 等头文件,与 src/ 一一对应,职责清晰。
所有 Token、关键字、错误信息均通过「中英映射表」支持双语输出,Diagnostic::error(...).en(...).zh(...) 统一接口。Every token, keyword and diagnostic supports bilingual output via one mapping table and a unified interface.
| 优化标志Flag | 中端 PassMid Pass | 向量化Vectorize | LTO | 目标Goal |
|---|---|---|---|---|
| -O0 | 关闭 | 关 | 关 | 快速调试debug |
| -O2 | 标准 | 关 | 关 | 高质量quality |
| -O3 | 全部 | 开 | 关 | 极致(默认)peak (default) |
| -O3 -fthin | 全部 | 开 | ThinLTO | 推荐生产prod |
| -O3 -flto -pgo | 全部 | 开 | LTO | 极致+反馈peak+PGO |
下载编译器与示例库,照着教程写出你的第一段 HP 程序。Download the compiler and examples, then write your first HP program following the tutorial.