参考

从源码构建

构建、使用和验证本地编译器。

从源码构建

当你想从代码仓库检出试用 Zero 或参与编译器开发时,请使用此路径。

pnpm install
make -C native/zero-c
bin/zero --version

make 将本地编译器构建到 .zero/bin/zero。仓库包装脚本 bin/zero 使用该本地构建。

快速命令循环

bin/zero check examples/hello.0
bin/zero build --emit exe --target linux-musl-x64 examples/add.0 --out .zero/out/add
./.zero/out/add

检查代码

检查包/模块结构:

bin/zero graph --json examples/systems-package

检查产物大小元数据:

bin/zero size --json examples/point.0

列出已知目标平台:

bin/zero targets

解释诊断信息并在不编辑文件的情况下检查修复计划:

bin/zero explain TAR002
bin/zero fix --plan --json conformance/native/fail/mem-copy-immutable-dst.0

原生目标平台

编译器目前支持以下文档中记录的原生目标平台名称的直接可执行文件输出:

  • darwin-arm64
  • darwin-x64
  • linux-arm64
  • linux-musl-arm64
  • linux-musl-x64
  • linux-x64
  • win32-arm64.exe
  • win32-x64.exe
bin/zero build --emit exe --target linux-musl-x64 examples/add.0 --out .zero/out/add-linux-musl
bin/zero build --emit exe --target win32-x64.exe examples/hello.0 --out .zero/out/hello-win32

不支持的目标平台或功能请求会报告诊断信息,而不是静默选择其他后端。

直接目标文件

为外部原生目标平台构建小型目标文件产物:

bin/zero build --emit obj --target darwin-arm64 examples/direct-call-add.0 --out .zero/out/direct-call-add.o

当代理需要结构化的就绪数据而不需要写入产物时,请在构建之前使用 bin/zero check --json --emit obj --target <target> <input>

当前语言子集

编译器支持示例中所使用的命令行语言子集:

  • 多文件清单包
  • 函数和类型化参数
  • 类型化的 letmut
  • 固定数组字面量、重复字面量和赋值
  • defer
  • match
  • checkretifelsewhile
  • 调用和成员调用
  • 字符串、数字、布尔值和二元运算符
  • typeextern type
  • 类型字面量和直接字段访问
  • enum
  • 带载荷和不带载荷的 choice 标签
  • owned<T>Span<T>ref<T>mutref<T> 对文档中描述子集的检查
  • 早期的 std.memstd.codecstd.parsestd.fs 及平台辅助接口

验证代码仓库

pnpm run docs:test
pnpm run conformance
pnpm run native:test
pnpm run command-contracts

运行本地基准测试冒烟覆盖:

pnpm run bench

本仓库中的 TypeScript 代码是用于文档、测试、基准测试和编辑器集成的辅助工具。 它不是一个独立的 TypeScript 编译器实现。