概述
在构建了针对 WASI 和原生平台的可移植应用程序之后,第42章 你现在站在 Zig 标准库的门槛上——这是一个精心策划的集合,包含大约 70 个顶层模块和 30 多个目录,涵盖数据结构、I/O、加密、压缩和编译器内部结构。std.zig
本章作为你的地图:一个导航索引,帮助你在版本 0.15.2 的 zig/lib/std/ 中定位,显示在哪里找到功能以及库分类如何与后续深入章节对齐。
与教程章节不同,这是一个参考指南——没有代码示例,只有组织好的指针。使用它可以快速定位模块,理解标准库的分类法,并跳转到第44-52章的详细处理。第44章 将其视为 Zig "包含电池" 哲学的目录。
学习目标
- 自信地导航
zig/lib/std/的物理布局,区分顶层文件与子目录。std - 识别哪些标准库组件处理集合、I/O、格式化、压缩、时间、进程和调试功能。44
- 识别模块的文件系统路径与其导入名称之间的关系(例如,
std.ArrayList映射到array_list.zig)。array_list.zig - 使用此索引作为跳板进入详细API章节,而不会迷失在100多个源文件中。44
标准库概览
标准库作为Zig编译器安装的一部分提供,位于zig/lib/std/。其根目录包含大约:
- 70个文件提供独立模块(例如,
array_list.zig、json.zig、log.zig) - 30多个子目录分组相关功能(例如,
crypto/、compress/、fs/、math/) - 1个入口点:
std.zig,重新导出公共API表面
当你编写@import("std")时,编译器加载std.zig,然后为每个公共符号执行pub const ArrayList = @import("array_list.zig")及类似操作。这种扁平命名空间设计意味着std.ArrayList和std.json位于同一级别,即使某些实现在子目录中跨越多个文件。
目录树(选择性视图)
以下是显示关键目录和代表性文件的ASCII树。这不是详尽的(某些目录包含20多个文件),但它突出显示了用于定位的地标。
std/ ──► Build/ ──► Cache.zig, Fuzz.zig, Module.zig, Step.zig, Watch.zig, WebServer.zig, abi.zig
│
├──► Cache/ ──► DepTokenizer.zig, Directory.zig, Path.zig
│
├──► Step/ ──► CheckFile.zig, CheckObject.zig, Compile.zig, ConfigHeader.zig, Fail.zig,
│ Fmt.zig, InstallArtifact.zig, InstallDir.zig, InstallFile.zig, ObjCopy.zig,
│ Options.zig, RemoveDir.zig, Run.zig, TranslateC.zig, UpdateSourceFiles.zig, WriteFile.zig
│
└──► Watch/ ──► FsEvents.zig
└──► Io/ ──► DeprecatedReader.zig, DeprecatedWriter.zig, Reader.zig, Writer.zig, counting_reader.zig
│
├──► fixed_buffer_stream.zig, test.zig, tty.zig
│
└──► Reader/ ──► Limited.zig, test.zig
└──► Random/ ──► Ascon.zig, ChaCha.zig, Isaac64.zig, Pcg.zig, RomuTrio.zig, Sfc64.zig, SplitMix64.zig
│
├──► Xoroshiro128.zig, Xoshiro256.zig, benchmark.zig, test.zig, ziggurat.zig
└──► Target/ ──► Query.zig, aarch64.zig, amdgcn.zig, arc.zig, arm.zig, avr.zig, bpf.zig, csky.zig
│
├──► generic.zig, hexagon.zig, lanai.zig, loongarch.zig, m68k.zig, mips.zig, msp430.zig
│
├──► nvptx.zig, powerpc.zig, propeller.zig, riscv.zig, s390x.zig, sparc.zig, spirv.zig
│
├──► ve.zig, wasm.zig, x86.zig, xcore.zig, xtensa.zig
└──► Thread/ ──► Condition.zig, Futex.zig, Pool.zig, ResetEvent.zig, RwLock.zig, Semaphore.zig, WaitGroup.zig
│
├──► Mutex/ ──► Recursive.zig
│
└──► Mutex.zig
└──► builtin/ ──► assembly.zig
└──► c/ ──► darwin.zig, dragonfly.zig, freebsd.zig, haiku.zig, netbsd.zig, openbsd.zig, serenity.zig, solaris.zig
└──► compress/ ──► flate.zig, lzma.zig, lzma2.zig, xz.zig, zstd.zig
│
├──► flate/ ──► BlockWriter.zig, Compress.zig, Decompress.zig, HuffmanEncoder.zig, Lookup.zig, Token.zig, testdata/
│
├──► lzma/ ──► decode/, decode.zig, test.zig, testdata/, vec2d.zig
│
├──► lzma2/ ──► decode.zig
│
├──► xz/ ──► block.zig, test.zig, testdata/
│
└──► zstd/ ──► Decompress.zig
└──► crypto/ ──► Certificate.zig, Sha1.zig, aegis.zig, aes.zig, aes_gcm.zig, aes_ocb.zig, argon2.zig, ascon.zig, bcrypt.zig
│
├──► benchmark.zig, blake2.zig, blake3.zig, chacha20.zig, cmac.zig, codecs.zig, ecdsa.zig, errors.zig, ff.zig
│
├──► ghash_polyval.zig, hash_composition.zig, hkdf.zig, hmac.zig, isap.zig, keccak_p.zig, md5.zig, ml_kem.zig
│
├──► modes.zig, pbkdf2.zig, phc_encoding.zig, poly1305.zig, salsa20.zig, scrypt.zig, sha2.zig, sha3.zig
│
├──► siphash.zig, test.zig, timing_safe.zig, tlcsprng.zig, tls.zig
│
├──► 25519/ ──► curve25519.zig, ed25519.zig, edwards25519.zig, field.zig, ristretto255.zig, scalar.zig, x25519.zig
│
├──► aes/ ──► aesni.zig, armcrypto.zig, soft.zig
│
├──► codecs/ ──► asn1/, asn1.zig, base64_hex_ct.zig
│
├──► pcurves/ ──► common.zig, p256/, p256.zig, p384/, p384.zig, secp256k1/, secp256k1.zig, tests/
│
└──► tls/ ──► Client.zig
└──► debug/ ──► Coverage.zig, Dwarf.zig, FixedBufferReader.zig, Info.zig, MemoryAccessor.zig, Pdb.zig, SelfInfo.zig
│
├──► no_panic.zig, simple_panic.zig
│
└──► Dwarf/ ──► abi.zig, call_frame.zig, expression.zig
└──► dwarf/ ──► AT.zig, ATE.zig, EH.zig, FORM.zig, LANG.zig, OP.zig, TAG.zig
└──► fmt/ ──► float.zig, parse_float.zig
│
├──► parse_float/ ──► FloatInfo.zig, FloatStream.zig, common.zig, convert_eisel_lemire.zig
│
├──► convert_fast.zig, convert_hex.zig, convert_slow.zig, decimal.zig, parse.zig
└──► fs/ ──► AtomicFile.zig, Dir.zig, File.zig, get_app_data_dir.zig, path.zig, test.zig, wasi.zig
└──► hash/ ──► Adler32.zig, auto_hash.zig, benchmark.zig, cityhash.zig, fnv.zig, murmur.zig, verify.zig, wyhash.zig
│
└──► xxhash.zig
│
└──► crc/ ──► crc.zig, impl.zig, test.zig
└──► heap/ ──► FixedBufferAllocator.zig, PageAllocator.zig, SmpAllocator.zig, ThreadSafeAllocator.zig, WasmAllocator.zig
│
├──► arena_allocator.zig, debug_allocator.zig, memory_pool.zig, sbrk_allocator.zig
└──► http/ ──► ChunkParser.zig, Client.zig, HeadParser.zig, HeaderIterator.zig, Server.zig, test.zig
└──► json/ ──► JSONTestSuite_test.zig, Scanner.zig, Stringify.zig, dynamic.zig, dynamic_test.zig
│
├──► hashmap.zig, hashmap_test.zig, scanner_test.zig, static.zig, static_test.zig, test.zig
└──► math/ ──► acos.zig, acosh.zig, asin.zig, asinh.zig, atan.zig, atan2.zig, atanh.zig, cbrt.zig, copysign.zig
│
├──► cosh.zig, expm1.zig, expo2.zig, float.zig, frexp.zig, gamma.zig, gcd.zig, hypot.zig
│
├──► ilogb.zig, isfinite.zig, isinf.zig, isnan.zig, isnormal.zig, iszero.zig, lcm.zig, ldexp.zig, log.zig
│
├──► log10.zig, log1p.zig, log2.zig, log_int.zig, modf.zig, nextafter.zig, pow.zig, powi.zig
│
├──► scalbn.zig, signbit.zig, sinh.zig, sqrt.zig, tanh.zig
│
├──► big/ ──► int.zig, int_test.zig
│
└──► complex/ ──► abs.zig, acos.zig, acosh.zig, arg.zig, asin.zig, asinh.zig, atan.zig, atanh.zig
└──► conj.zig, cos.zig, cosh.zig, exp.zig, ldexp.zig, log.zig, pow.zig, proj.zig, sin.zig
└──► sinh.zig, sqrt.zig, tan.zig, tanh.zig
└──► mem/ ──► Allocator.zig
└──► meta/ ──► trailer_flags.zig
└──► net/ ──► test.zig
└──► os/ ──► emscripten.zig, freebsd.zig, linux.zig, plan9.zig, uefi.zig, wasi.zig, windows.zig
│
├──► linux/ ──► IoUring.zig, aarch64.zig, arm.zig, bpf.zig, bpf/, hexagon.zig, io_uring_sqe.zig, ioctl.zig
│
├──► loongarch64.zig, m68k.zig, mips.zig, mips64.zig, powerpc.zig, powerpc64.zig
│
├──► riscv32.zig, riscv64.zig, s390x.zig, seccomp.zig, sparc64.zig, syscalls.zig
│
├──► test.zig, thumb.zig, tls.zig, vdso.zig, x86.zig, x86_64.zig
│
└──► plan9/ ──► x86_64.zig
│
└──► uefi/ ──► device_path.zig, hii.zig, pool_allocator.zig, protocol.zig, protocol/, status.zig
│
└──► windows/ ──► advapi32.zig, crypt32.zig, kernel32.zig, lang.zig, nls.zig, ntdll.zig
└──► ntstatus.zig, sublang.zig, test.zig, tls.zig, win32error.zig, ws2_32.zig
└──► posix/ ──► test.zig
└──► process/ ──► Child.zig
└──► sort/ ──► block.zig, pdq.zig
└──► testing/ ──► FailingAllocator.zig
└──► time/ ──► epoch.zig
└──► unicode/ ──► (empty, API in `unicode.zig`)
└──► valgrind/ ──► cachegrind.zig, callgrind.zig, memcheck.zig
└──► tar/ ──► Writer.zig, test.zig
└──► testdata/
└──► tz/ ──► (empty)
└──► zon/ ──► Serializer.zig, parse.zig, stringify.zig
└──► zig/ ──► Ast.zig, AstGen.zig, AstRlAnnotate.zig, BuiltinFn.zig, Client.zig, ErrorBundle.zig
│
├──► LibCDirs.zig, LibCInstallation.zig, Parse.zig, Server.zig, WindowsSdk.zig
│
├──► Zir.zig, Zoir.zig, ZonGen.zig, c_builtins.zig, c_translation.zig
│
├──► number_literal.zig, parser_test.zig, perf_test.zig, primitives.zig
│
├──► string_literal.zig, system.zig, target.zig, tokenizer.zig
│
├──► Ast/ ──► Render.zig
│
├──► llvm/ ──► BitcodeReader.zig, Builder.zig, bitcode_writer.zig, ir.zig
│
└──► system/ ──► NativePaths.zig, arm.zig, darwin.zig, linux.zig, windows.zig, x86.zig
└──► darwin/像 crypto/、compress/ 和 math/ 这样的目录包含数十个专门文件。顶层 .zig 文件(例如 crypto.zig)通常重新导出子目录的公共 API,因此你可以编写 std.crypto.aes 而无需导航内部结构。crypto.zig
模块分类
以下部分按用途对标准库功能进行分组,将每个类别映射到其详细章节。当你知道需要什么但不知道它在哪里时,请使用此快速参考指南。
集合与算法
涵盖于:第44章
| 模块/路径 | 用途 |
|---|---|
std.ArrayList | 动态数组(向量);参见 array_list.zig |
std.MultiArrayList | 数组结构布局;参见 multi_array_list.zig |
std.HashMap / AutoHashMap / ArrayHashMap | 具有不同存储策略的哈希表;参见 hash_map.zig, array_hash_map.zig |
std.StaticStringMap | 用于字符串键的编译期完美哈希映射;参见 static_string_map.zig |
std.DoublyLinkedList | 侵入式双向链表;参见 DoublyLinkedList.zig |
std.SinglyLinkedList | 侵入式单向链表;参见 SinglyLinkedList.zig |
std.SegmentedList | 维护稳定指针的分段列表;参见 segmented_list.zig |
std.Treap | 树堆(树 + 堆);参见 treap.zig |
std.PriorityQueue | 最小/最大堆;参见 priority_queue.zig |
std.PriorityDequeue | 双端优先队列;参见 priority_dequeue.zig |
std.sort | 排序算法(pdqsort、块排序);参见 sort/ |
文本、格式化与 Unicode
涵盖于:第45章
| 模块/路径 | 用途 |
|---|---|
std.fmt | 格式化 API:format、parseInt、parseFloat;参见 fmt/ |
std.ascii | ASCII 字符工具;参见 ascii.zig |
std.unicode | Unicode 操作(UTF-8、UTF-16);参见 unicode/ |
std.base64 | Base64 编码/解码;参见 base64.zig |
std.leb128 | LEB128 编码;参见 leb128.zig |
I/O 与流适配器
涵盖于:第46章
| 模块/路径 | 用途 |
|---|---|
std.io (now std.Io) | Reader/Writer 接口;参见 Io.zig, Io/ |
std.fs | 文件系统操作:Dir、File、path;参见 fs/ |
std.io.fixedBufferStream | 固定缓冲区流适配器;参见 Io/fixed_buffer_stream.zig |
std.io.countingReader | 计数读取器适配器;参见 Io/counting_reader.zig |
时间、日志记录与进度
涵盖于:第47章
| 模块/路径 | 用途 |
|---|---|
std.time | 时间保持、休眠、时钟;参见 time/ |
std.log | 带级别的日志记录框架;参见 log.zig |
std.Progress | 进度报告;参见 Progress.zig |
std.tz | 时区数据;参见 tz/ |
进程与环境
涵盖于:第48章
| 模块/路径 | 用途 |
|---|---|
std.process | 参数、环境、生成子进程;参见 process/ |
std.posix | POSIX 包装器;参见 posix/ |
std.os | 平台特定的操作系统接口;参见 os/ |
压缩与归档
涵盖于:第49章
| 模块/路径 | 用途 |
|---|---|
std.compress | 压缩:flate、lzma、lzma2、zstd;参见 compress/ |
std.tar | TAR 归档读写;参见 tar/ |
std.zip | ZIP 归档支持;参见 zip.zig |
随机、数学与哈希
涵盖于:第50章
| 模块/路径 | 用途 |
|---|---|
std.Random | 伪随机数生成器:ChaCha、PCG、Ascon;参见 Random/ |
std.math | 数学函数(三角函数、指数、对数等);参见 math/ |
std.hash | 非加密哈希:CRC、Adler32、auto_hash;参见 hash/ |
std.crypto | 加密原语:AES、Ed25519、SHA-2、AEGIS;参见 crypto/ |
调试与 Valgrind
涵盖于:第52章
| 模块/路径 | 用途 |
|---|---|
std.debug | 恐慌处理、堆栈跟踪、DWARF 信息;参见 debug/ |
std.valgrind | Valgrind 集成(内存检查、缓存分析);参见 valgrind/ |
专用模块(未详细涵盖)
一些标准库组件高度专业化或主要供编译器内部使用。它们出现在目录树中,但不是后续章节的重点:
| 模块/路径 | 用途 |
|---|---|
std.Build | 构建系统内部;参见 Build/,在 第22章 中涵盖 |
std.zig | 编译器 AST、代码生成;参见 zig/;高级主题 |
std.zon | ZON 解析器/序列化器;参见 zon/ |
std.Target | 目标架构元数据;参见 Target/ |
std.SemanticVersion | 语义版本控制;参见 SemanticVersion.zig |
std.Uri | URI 解析;参见 Uri.zig |
std.wasm | WebAssembly 常量;参见 wasm.zig |
std.elf, std.macho, std.coff, std.pdb | 二进制格式解析器;参见相应的 .zig 文件 |
std.dwarf | DWARF 常量;参见 dwarf/ |
std.Thread | 线程原语;在 第29章 中提及 |
std.atomic, std.once | 原子操作、一次性初始化;参见 第29章 |
std.http, std.net, std.json | 网络和 HTTP;在 第31章 中涵盖 |
导入约定
Zig 的标准库在顶层使用扁平命名空间:std.ArrayList、std.HashMap、std.json 等。在内部,一些模块分布在子目录中(crypto/、compress/),但公共 API 通过根目录中的单个 .zig 文件重新导出。
示例:
std.crypto.aes→ 在crypto/aes/中定义,由crypto.zig重新导出std.compress.flate→ 在compress/flate/中定义,由compress.zig重新导出std.fs.Dir→ 在fs/Dir.zig中定义,由fs.zig重新导出
如有疑问,请检查 std.zig 获取规范导出名称,然后追踪到实现文件。
导航源代码
要自己探索标准库:
定位你的 Zig 安装:运行
zig env并注意lib_dir。#命令行标志浏览 :使用
ls、tree或你的编辑器文件资源管理器。首先阅读顶层文件:
std.zig显示公共内容;单独的.zig文件包含实现。检查子目录以获取深度:像
crypto/、compress/、math/这样的目录包含专门的代码。crypto
标准库是用 Zig 编写的,因此阅读其源代码是学习惯用模式的绝佳方式——特别是错误处理、分配器线程和编译时技巧。
下一步
这个索引为你定位方向,但真正的学习发生在详细章节中:
- 第44章:集合与算法—
ArrayList、HashMap、PriorityQueue、排序。第44章 - 第45章:文本、格式化与 Unicode—
std.fmt、std.ascii、Base64。第45章 - 第46章:I/O 与流—
std.Io、std.fs、适配器。第46章 - 第47章:时间、日志记录与进度—
std.time、std.log、std.Progress。第47章 - 第48章:进程与环境—
std.process、std.posix。第48章 - 第49章:压缩与归档—
std.compress、std.tar、std.zip。第49章 - 第50章:随机、数学与哈希—
std.Random、std.math、std.crypto。第50章 - 第51章:内存与元数据工具—
std.mem、std.meta。第51章 - 第52章:调试与 Valgrind—
std.debug、std.valgrind。第52章
每章都提供代码示例、API 演练和实用指南。使用此索引直接跳转到你需要的模块。
注意事项与限制
练习
- 运行
zig env并导航到lib_dir/std/,然后ls根目录以查看所有顶层模块。选择三个你从未听说过的模块,阅读它们的前 20 行以了解它们的用途。 - 在你的编辑器中打开
std.zig并追踪std.ArrayList是如何定义的。(提示:pub const ArrayList = @import("array_list.zig").ArrayList;) - 在标准库中 grep
pub fn以计算所有模块中存在多少公共函数。使用此来评估标准库的范围。 - 比较
crypto/与compress/的目录结构。注意两者都包含特定算法的子目录,这说明了 Zig 的模块化组织哲学。
注意事项、替代方案与边缘情况
- 一些模块同时具有
.zig文件和目录(例如,fmt.zig和fmt/)。文件通常重新导出目录的内容或提供高级 API。fmt.zig - 标准库不包含包管理器或注册表集成(那是外部工具)。它专注于语言级实用程序和操作系统抽象。
- 第三方库不是
std的一部分。你将使用build.zig.zon和std.Build.dependency()来获取它们。