# zhlang 自举编译器(官方发行版)

纯 zhlang 原生编译器:源码全部是 zhlang,由自己编译自己(stage1 == stage2 逐字节相同),
AST 直接生成机器码 / ELF / PE,**不经过 C 编译器或 TinyCC**。编译器中文源码见
`zhlang-自举源码.tar.gz`(仅 `自举/` 与 `标准库/` 的 `.zh/.zhf`,不含 C 代码与工具链)。

## 发行包内容

| 路径 | 内容 |
| --- | --- |
| `自举编译器-linux-x86_64` / `-linux-aarch64` / `-windows-x86_64.exe` | 三端宿主编译器(各内建三端交叉目标) |
| `SHA256SUMS` | 三个编译器的 SHA256 校验值 |
| `zhlang-自举源码.tar.gz` | 编译器自举中文源码(仅 `.zh/.zhf` 源文件) |
| `规格.md` | 语言完整规格(语法/类型/内置 API/标准库) |
| `示例/` | 示例程序(`.zh` 源文件) |
| `语法高亮/` | 编辑器语法高亮(`.mtsx` 规则 + 说明 + 预览) |
| `发布包.py` | 包仓库工具:`打包 <源码目录> <仓库根>` / `索引 <仓库根>` |
| `文档/` | 离线文档站(教程 / API / 手册,自包含 HTML) |
| `说明.md` | 本说明 |

## 快速上手

1. 把本平台对应的编译器改名为 `编译`(Windows 为 `编译.exe`),放到 PATH 或常用目录。
2. 准备一个 `.zh` 源文件,例如 `你好.zh`:

```zh
打印("你好,zhlang!")
```

3. 编译并运行:

```sh
./编译 你好.zh && ./你好
# 你好,zhlang!
```

默认目标 = 当前宿主;`-o` 省略时产物放在源文件旁(去 `.zh`)。

## 包管理

```sh
./编译 get 包名[@版本]        # 默认仓库 https://pingsec.top/repo
./编译 get 包名 --仓库 http://你的镜像 --目录 项目根
```

安装到 `项目根/包/<包名>/`,校验包摘要并写 `zh包.json` / `zh包锁.json`;
依赖按索引递归安装。仓库发布用 `发布包.py`(打包/索引)。

## 三端宿主与交叉编译

三个宿主编译器**各自内建三端交叉目标**(一个二进制同时能出 Linux / aarch64 / Windows 产物):

| 文件 | 宿主 | 可交叉产出的目标 |
| --- | --- | --- |
| `自举编译器-linux-x86_64` | Linux x86_64 | x86_64-linux / aarch64-linux / x86_64-windows |
| `自举编译器-linux-aarch64` | Linux aarch64 | aarch64-linux / x86_64-linux / x86_64-windows |
| `自举编译器-windows-x86_64.exe` | Windows x86_64 | x86_64-windows / x86_64-linux / aarch64-linux |

用 `--target` 指定目标(接受三元组或 Go 风格 `系统/架构`):

```sh
./编译 源.zh -o 产物 --target aarch64-linux-gnu
./编译 源.zh -o 产物.exe --target x86_64-windows-gnu
./编译 源.zh -o 产物 --target linux/amd64
```

`--targets` 列出全部目标与能力表;环境变量 `ZHC_TARGET`(或 `ZHC_GOOS`+`ZHC_GOARCH`)提供默认值。

## 标准库(已内嵌)

标准库已**编译进编译器二进制**(字符串/容器/数学/摘要/网络/网页/服务/样式/JS/TLS 等),
不需要额外的 `库/` 目录,也不需要设置环境变量。把编译器单独拷到任何目录,
`@引入 网页`、`@引入 服务` 等都能直接使用。

`示例/` 里的 `.zh` 可直接编译:

```sh
./编译 示例/你好.zh -o hello && ./hello
```

## 调试

`-d` / `--debug` 编译到临时文件直接运行(不留二进制),配合 `@断点调试(等级, 内容)` 指令:

```sh
./编译 源.zh -d
# 断点 源.zh:3 函数名 [等级] 内容
# 调试 源.zh:3> c      (继续 / q 退出 / b 栈 / ? 帮助)
```

`ZHLANG_DEBUG_LEVEL` 设上限过滤断点;`ZHLANG_DEBUG=1` 强制进入命令循环(管道调试)。

## 语法高亮

`语法高亮/` 提供编辑器高亮规则(`.mtsx`)与说明。详见 `语法高亮/说明.md`,
`语法高亮/预览.html` 可在浏览器里预览效果。

## 离线文档

`文档/` 是自包含的文档站(教程 / API / 手册),直接用浏览器打开 `文档/index.html` 即可,
无需联网。

## 校验

```sh
sha256sum -c SHA256SUMS          # Linux / macOS
```

Windows PowerShell:`Get-FileHash -Algorithm SHA256 .\自举编译器-windows-x86_64.exe`

## 能力与限制

支持:协程 / 通道 / 选择、TCP / HTTP / HTTPS(纯 zhlang TLS 1.3,含 P-521 / 名称约束 /
CRL 与 OCSP 钉接)、Windows PE 目录列举与进程执行、接口、闭包、结构体、类、`@断点调试`、文档注释、
垃圾回收(GC 阶段 2:保守标记-清除 + 空闲链复用;`堆回收`/`堆统计`/`堆整理`/`堆用量` 可观测)。

暂未实现:C 混写(`@C` / `@外部` / `编译C`)。

## 更多

源码:解包 `zhlang-自举源码.tar.gz` 后,用任一发行版编译器自编译(约 1 分钟):

```sh
tar xzf zhlang-自举源码.tar.gz
./编译 zhlang-*-自举源码/自举/原生.zh -o 原生
```

完整文档见官网。
