XPerf
语言Zig

zperf 语料库目标

大型树木不会被供应商化,并且语料库不会随仓库一起发布:将其克隆到仓库外的任意本地目录,并将该路径传递给代码检查器。使用以下命令进行检查:

cd packages/zperf/zperf-lint && zig build -Doptimize=fast
./zig-out/bin/zperf-lint --no-fail -f json <corpus-dir>/<tree>

固定目标

克隆于 2026-10-22(亚洲/上海)。

树链接提交大小.zig
zig (lib/std, src)https://codeberg.org/ziglang/zig.git8f0c6ce407f9总计 312M 的一部分1072 个遍历树
tigerbeetle (src/)https://github.com/tigerbeetle/tigerbeetle.git0450c32b2c3c14M248
ghosttyhttps://github.com/ghostty-org/ghostty.git67edd20a029263M603
http.zig(次要)https://github.com/karlseguin/http.zig.gite8272bfd57271.1M33

主要 G2 套装:zig(标准库 + 编译器) + tigerbeetle + ghostty(≥3 个大型生产树)。 http.zig 是一个精简的辅助套装。

检查器是 Zig,std.zig.Ast,同语言。默认路径跳过:tests / Build / benchmarks / fuzz / scripts / compiler_rt(参见 zperf-lint/README.md)。

G3/r4 结果(2026-10-22)

在默认规则映射下,每次运行的计数:r1 → r3 → r4。

Treer1 → r3 → r4 (defaults)
zig lib/std403 → 391 → 12
zig src (编译器)859 → 856 → 3
tigerbeetle src/252 → 184 → 1
ghostty441 → 425 → 9
http.zig(次要)25 → 24 → 1

G3/r4 之后默认关闭(成熟 Zig 上的 OK-习惯集合):zp-alloc-hot、zp-append-without-reserve、zp-debug-allocator、zp-large-struct-by-value、zp-print-hot、zp-unbuffered-io、zp-missing-free、zp-packable-bools、zp-usize-index-field、zp-aos-single-field、zp-catch-unreachable-alloc、zp-oversized-enum-tag、zp-optional-scalar-field、zp-bool-array、zp-runtime-div-hot、zp-per-packet-alloc、zp-map-put-without-ensure、zp-catch-unreachable-io。CLI 不会报告 off 规则(请参见 zperf-lint/README.md)。

默认开启: zp-page-allocator-small, zp-broad-runtime-safety, zp-static-string-map, zp-queue-ordered-remove, zp-shift-on-read, zp-invariant-float-div, zp-arena-reset-free-all, zp-create-destroy-hot, zp-fixed-size-alloc-hot.

反向优化 + 降级

  • 路径跳过:*fuzz*.zig,**/fuzz/**(合并到 --include-tests 中)
  • zp-page-allocator-small:精确匹配 page_allocator / *.page_allocator(不包括 huge_page_allocator)
  • zp-debug-allocator:仅匹配 DebugAllocator( / GPA( 实例化;跳过重新导出和测试上下文
  • zp-print-hot:跳过 if (log) / if (logging) 诊断门控
  • r4: 将几乎所有 OK-idiom 规则降级为默认 off;保留带有 TP 的规则(上面默认开启列表)在默认映射中开启

语料库准备:是

G3 + r4 降级完成。全 r4 剩余样本 n=26:TP 73.1%,OK-idiom 26.9%,FP+DOC+SKIP-path 0%。在 zp-queue-ordered-remove / zp-shift-on-read / zp-broad-runtime-safety / zp-fixed-size-alloc-hot 上真实 TP。没有 G4 不会大规模升级。

库存

<corpus-dir>/
  zig/            # symlink → zig-corpus/zig
  tigerbeetle/    # symlink
  ghostty/        # symlink
  http.zig/       # symlink (secondary)

不要将语料来源提交到 packages/zperf。