参考

目标能力

当前主机和目标无关的能力边界。

目标平台的现状

当前编译器包含一个小型显式目标表。使用以下命令查看:

zero targets

输出的 JSON 包含:

  • schemaVersion
  • 当前 host
  • 每个目标的 hosted 标志
  • 别名
  • 映射的 C 目标
  • 能力集

宿主能力

仅当前宿主目标暴露完整的宿主能力集:

  • args
  • env
  • fs
  • memory
  • net
  • proc
  • rand
  • stdio
  • time

非宿主目标仅暴露 zero targets --json 中为该目标列出的能力。部分非宿主目标包含文件系统、参数、环境、时间或随机数支持,但目前没有任何非宿主目标暴露 net

net 能力是当前 std.net 元数据和出站 std.http.fetch(...) 的目标门控。std.http.parseMethod(...) 是仅处理元数据的辅助函数,不需要 net。出站 HTTP 可在 Darwin arm64 和 Linux x64 宿主可执行文件路径上使用。

zero targets --json 为每个目标包含一个 httpRuntime 对象。在受支持的宿主目标上,它会报告 curl 提供者、平台或 C 库的 TLS 边界、TLS 验证状态、curl 系统库,以及 ZERO_HTTP_TEST_CA_BUNDLE 自定义 CA 覆盖。

最小的通用目标无关子集仍然是:

  • memory
  • stdio

这意味着使用宿主 std.fs 的示例在声明了 fs 能力的目标上是有效的。仅使用内存的包仍然可以构建目标无关的输出。

宿主文件 I/O

以下命令在宿主目标上可以成功运行:

zero check examples/resource-cli

相同的宿主文件系统接口在非宿主目标上会明确报错:

zero check --json --target linux-musl-x64 conformance/native/fail/std-fs-target-unsupported.0

诊断代码为 TAR002,修复 ID 为 choose-target-with-required-capability

网络元数据

以下命令在宿主目标上可以成功运行:

zero check conformance/native/pass/std-net-http-breadth.0

该检查会测试 std.netstd.http 元数据。它期望 std.net.connect(...)std.net.listen(...) 返回空句柄。std.http.fetch(...) 在受支持的宿主可执行文件路径上执行出站 HTTP,将响应元数据、头部和正文写入调用方拥有的存储中。std.http.headerValue(...) 可以在该缓冲区中定位指定响应头部的值。当前公共接口中没有套接字读写 API、结构化头部集合或流式正文 API。

相同的网络接口在没有 net 能力的目标上会明确报错:

zero check --json --target linux-musl-x64 conformance/check/fail/target-net-unsupported.0

目标无关内存

std.mem.copystd.mem.fill 不需要宿主文件系统支持:

zero build --target linux-musl-x64 examples/memory-package --out .zero/out/memory-package

使用 graph 和 size JSON 来查看目标相关信息:

zero graph --json --target linux-musl-x64 examples/memory-package
zero size --json --target linux-musl-x64 examples/memory-package

两个输出都包含 requiresCapabilitiestargetSupportstdlibHelpers

修复命令

使用 zero explain 获取人类可读和 JSON 格式的解释:

zero explain TAR002
zero explain --json TAR002

使用修复计划模式查看规范修复方案,而不会修改文件:

zero fix --plan --json --target linux-musl-x64 conformance/native/fail/std-fs-target-unsupported.0