当前 Jiang 语言编译器已经可以稳定自举。常规版本开发只依赖上一版稳定 jiangc 作为
bootstrap 输入;如果新版本包含旧 release 编译器无法直接编译的破坏性升级,则使用
bootstrap/<version> 和 release/<version> 双 worktree 流程。
Jiang 仍处于早期版本阶段,语言、标准库和编译器内部结构会继续快速迭代。
当前 release 分支仍以 macOS arm64 作为主要开发、验证和 release host。编译器本身依赖 LLVM 22。
LLVM 源码通过 vendor/llvm-project submodule 固定到 Jiang 维护的 LLVM 22.1.8 分支:
https://github.com/jjcfun/llvm-project.git
branch: jiang/22.1.8
tag: llvmorg-22.1.8
LLVM 本地工具链默认安装在仓库 build 目录下:
build/llvm/<host>/install
CMake build tree 放在同一组本地缓存目录:
build/llvm/<host>/build
也可以把 LLVM 安装到 Jiang home,供多个 worktree 复用:
$JIANG_HOME/toolchains/llvm/<version>/<host>
未设置 JIANG_HOME 时使用 ~/.jiang。构建脚本会通过 script/llvm_env.sh 查找 Jiang
托管的 LLVM:优先使用 build/llvm/<host>/install/bin/llvm-config,再 fallback 到
$JIANG_HOME/toolchains/llvm/<version>/<host>/bin/llvm-config。LLVM 源码来自
vendor/llvm-project submodule,不会写入 submodule 目录。脚本不会 fallback 到系统全局
LLVM,也不接受外部 LLVM_CONFIG 覆盖。
bash ./script/install_llvm.sh --local
bash ./script/install_llvm.sh --userinstall_llvm.sh 默认等价于 --local,从 vendor/llvm-project 构建 LLVM 并安装到
build/llvm/<host>/install。--user 会安装到 $JIANG_HOME/toolchains/llvm/<version>/<host>。
如果在 release 包中运行脚本且没有 submodule,脚本会从 jjcfun/llvm-project 的
jiang/22.1.8 分支浅克隆源码。已存在的本地 LLVM 22 会直接复用;需要强制重建时设置
JIANG_LLVM_FORCE_BUILD=1。LLVM 库默认以静态库形式链接进 jiangc,release 用户不需要
安装 LLVM runtime。
macOS 下默认使用 JIANG_MACOS_DEPLOYMENT_TARGET=11.0 构建 LLVM 和链接 jiangc,需要
调整最低系统版本时应统一设置这个变量。
构建当前源码默认依赖 bootstrap/0.4.4 分支产出的过渡编译器。推荐目录结构:
../bootstrap-0.4.4/build/bin/jiangc.next
如果没有同级 bootstrap worktree,也可以把 0.4.4 bootstrap 编译器安装到
~/.jiang/versions/0.4.4-bootstrap/bin/jiangc,或通过 BOOTSTRAP_BIN 显式指定。
运行当前源码的自举构建:
bash ./script/build_next.sh该脚本会依次构建:
../bootstrap-0.4.4/build/bin/jiangc.next -> build/bin/jiangc.next
并默认用 build/bin/jiangc.next 跑 smoke、backend CLI smoke 和 lang check。输出为:
build/bin/jiangc.next
构建脚本会检测 bootstrap compiler 版本,只接受 jiang 0.4.4-bootstrap。如只想构建不跑验证,
可设置 VERIFY=none;只跑 smoke 可设置 VERIFY=smoke。
构建脚本默认从根目录 package.ini 的 [package].version 读取编译器版本,并校验
build/bin/jiangc.next --version 的输出。也可以用 JIANG_VERSION=... 临时覆盖。release 阶段需要完整
两跳自举时,使用:
BOOTSTRAP_DEPTH=stable VERIFY=full bash ./script/build_next.sh破坏性升级版本的开发流程见 编译器开发流程。正式 release 前需要在
release/<version> 上使用对应的 bootstrap/<version> 编译器完成构建、语言测试和 stable bootstrap。
当前 release 只承诺 macOS arm64 hosted jiangc。Linux jiangc release 暂缓到语法和
bootstrap pipeline 稳定之后。源码中已有 Linux x86_64/aarch64、Wasm wasm32-unknown-unknown、
WASI wasm32-wasi 和 Windows MSVC x86_64/aarch64 的 LLVM IR/object 输出 smoke。
WASI executable 依赖本地 wasi-sdk,默认安装在:
$JIANG_HOME/toolchains/wasi-sdk/<version>/<host>
未设置 JIANG_HOME 时使用 ~/.jiang。可通过以下脚本安装:
bash ./script/install_wasi.sh其他 target 的 executable、linker 和 startup 路径仍是实验能力。inline asm 已作为内建
DSL provider 提供基础 #asm { ... } / #jiang.asm { ... } 能力,用于后续 no-libc
syscall/runtime 路线;Linux no-libc 静态 executable 仍是后续阶段目标。
基础测试:
JIANGC=./build/bin/jiangc bash ./script/smoke.sh
JIANGC=./build/bin/jiangc bash ./script/backend_cli_smoke.sh
JIANGC=./build/bin/jiangc bash ./script/lang_check.shscript/smoke.sh 默认跳过较慢的 lang provider dylib smoke。需要覆盖该路径时,显式打开:
JIANG_SLOW_SMOKE=1 JIANGC=./build/bin/jiangc bash ./script/smoke.shlang_check.sh 默认的 run/ 用例仍走 --emit-llvm 后用 LLVM clang 链接。需要验证
release object/executable 路径和 LLVM O2 pass pipeline 时,打开 release run:
LANG_CHECK_RELEASE_RUNS=1 JIANGC=./build/bin/jiangc bash ./script/lang_check.shmacOS arm64 release 包:
bash ./script/package_macos_release.sh该脚本默认从 package.ini 读取版本,要求 build/bin/jiangc --version 与包版本一致。
release zip 中的 jiangc 静态链接 LLVM,不依赖本机 libLLVM.dylib。包内 install.sh
会安装到 ~/.jiang/versions/<version> 并更新 ~/.jiang/bin/jiangc。
验证完整 release 链路:
bash ./script/release_smoke.sh该脚本会复用或安装本地 LLVM,执行 stable bootstrap 构建,生成 macOS release zip,解包运行
jiangc --version,用临时 PREFIX 验证包内 install.sh,并检查产物没有动态依赖
libLLVM / liblld。
- 官网与语言文档
- 架构文档
- 编译器开发流程
- Std incubator
- 阶段设计:AST、Resolve、HIR、 Type Check、Monomorph、 MIR、Layout、 Borrow Check、Backend、 Startup、Targets
- PEG 语法
- 语言设计
Apache License 2.0。详见 LICENSE。