Chapter 43Stdlib Index

标准库索引(地图)

概述

在构建了针对 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.zigjson.ziglog.zig
  • 30多个子目录分组相关功能(例如,crypto/compress/fs/math/
  • 1个入口点std.zig,重新导出公共API表面

当你编写@import("std")时,编译器加载std.zig,然后为每个公共符号执行pub const ArrayList = @import("array_list.zig")及类似操作。这种扁平命名空间设计意味着std.ArrayListstd.json位于同一级别,即使某些实现在子目录中跨越多个文件。

目录树(选择性视图)

以下是显示关键目录和代表性文件的ASCII树。这不是详尽的(某些目录包含20多个文件),但它突出显示了用于定位的地标。

graph TB subgraph "std 命名空间" STD["std (std.zig)"] end subgraph "核心工具" MEM["mem.zig<br/>Allocator, zeroes, copy"] META["meta.zig<br/>Type introspection"] MATH["math.zig<br/>Constants, operations"] FMT["fmt.zig<br/>format, parseInt"] end subgraph "操作系统抽象" OSMOD["os.zig<br/>environ, argv, getFdPath"] POSIX["posix.zig<br/>open, read, write, mmap"] LINUX["os/linux.zig<br/>syscall0-6, clone"] WINDOWS["os/windows.zig<br/>OpenFile, CreatePipe"] end subgraph "文件系统" FS["fs.zig<br/>cwd, max_path_bytes"] DIR["fs/Dir.zig<br/>openFile, makeDir"] FILE["fs/File.zig<br/>read, write, stat"] end subgraph "内存管理" HEAP["heap.zig<br/>page_size_min"] ARENA["heap/arena_allocator.zig"] DEBUG_ALLOC["heap/debug_allocator.zig<br/>DebugAllocator"] end subgraph "调试" DEBUG["debug.zig<br/>SelfInfo, captureCurrentStackTrace"] DWARF["debug/Dwarf.zig"] PDB["debug/Pdb.zig"] CPU_CTX["debug/cpu_context.zig<br/>Native"] end subgraph "C 互操作" C["c.zig<br/>timespec, fd_t, mode_t"] C_DARWIN["c/darwin.zig"] C_FREEBSD["c/freebsd.zig"] end subgraph "测试与进程" TESTING["testing.zig<br/>allocator, expect"] PROCESS["process.zig<br/>getCwd, exit"] PROGRESS["Progress.zig<br/>Terminal updates"] end subgraph "网络与其他" NET["net.zig<br/>Address, parseIp"] UNICODE["unicode.zig<br/>utf8ToUtf16Le"] COFF["coff.zig<br/>PE format"] end STD --> MEM STD --> META STD --> MATH STD --> FMT STD --> OSMOD STD --> POSIX STD --> FS STD --> HEAP STD --> DEBUG STD --> C STD --> TESTING STD --> PROCESS STD --> NET STD --> UNICODE FS --> DIR FS --> FILE HEAP --> ARENA HEAP --> DEBUG_ALLOC DEBUG --> DWARF DEBUG --> PDB DEBUG --> CPU_CTX OSMOD --> LINUX OSMOD --> WINDOWS C --> C_DARWIN C --> C_FREEBSD POSIX --> OSMOD FS --> POSIX NET --> POSIX PROCESS --> POSIX
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:formatparseIntparseFloat;参见 fmt/
std.asciiASCII 字符工具;参见 ascii.zig
std.unicodeUnicode 操作(UTF-8、UTF-16);参见 unicode/
std.base64Base64 编码/解码;参见 base64.zig
std.leb128LEB128 编码;参见 leb128.zig

I/O 与流适配器

涵盖于:第46章

模块/路径用途
std.io (now std.Io)Reader/Writer 接口;参见 Io.zig, Io/
std.fs文件系统操作:DirFilepath;参见 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.posixPOSIX 包装器;参见 posix/
std.os平台特定的操作系统接口;参见 os/

压缩与归档

涵盖于:第49章

模块/路径用途
std.compress压缩:flate、lzma、lzma2、zstd;参见 compress/
std.tarTAR 归档读写;参见 tar/
std.zipZIP 归档支持;参见 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/

内存与元数据工具

涵盖于:第51章

模块/路径用途
std.mem内存工具:分割、标记化、复制、搜索;参见 mem.zig, mem/
std.meta类型内省辅助工具;参见 meta/, meta.zig

调试与 Valgrind

涵盖于:第52章

模块/路径用途
std.debug恐慌处理、堆栈跟踪、DWARF 信息;参见 debug/
std.valgrindValgrind 集成(内存检查、缓存分析);参见 valgrind/

专用模块(未详细涵盖)

一些标准库组件高度专业化或主要供编译器内部使用。它们出现在目录树中,但不是后续章节的重点:

模块/路径用途
std.Build构建系统内部;参见 Build/,在 第22章 中涵盖
std.zig编译器 AST、代码生成;参见 zig/;高级主题
std.zonZON 解析器/序列化器;参见 zon/
std.Target目标架构元数据;参见 Target/
std.SemanticVersion语义版本控制;参见 SemanticVersion.zig
std.UriURI 解析;参见 Uri.zig
std.wasmWebAssembly 常量;参见 wasm.zig
std.elf, std.macho, std.coff, std.pdb二进制格式解析器;参见相应的 .zig 文件
std.dwarfDWARF 常量;参见 dwarf/
std.Thread线程原语;在 第29章 中提及
std.atomic, std.once原子操作、一次性初始化;参见 第29章
std.http, std.net, std.json网络和 HTTP;在 第31章 中涵盖

导入约定

Zig 的标准库在顶层使用扁平命名空间:std.ArrayListstd.HashMapstd.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 获取规范导出名称,然后追踪到实现文件。

要自己探索标准库:

  1. 定位你的 Zig 安装:运行 zig env 并注意 lib_dir#命令行标志

  2. 浏览 :使用 lstree 或你的编辑器文件资源管理器。

  3. 首先阅读顶层文件std.zig 显示公共内容;单独的 .zig 文件包含实现。

  4. 检查子目录以获取深度:像 crypto/compress/math/ 这样的目录包含专门的代码。crypto

标准库是用 Zig 编写的,因此阅读其源代码是学习惯用模式的绝佳方式——特别是错误处理、分配器线程和编译时技巧。

下一步

这个索引为你定位方向,但真正的学习发生在详细章节中:

  • 第44章:集合与算法—ArrayListHashMapPriorityQueue、排序。第44章
  • 第45章:文本、格式化与 Unicode—std.fmtstd.ascii、Base64。第45章
  • 第46章:I/O 与流—std.Iostd.fs、适配器。第46章
  • 第47章:时间、日志记录与进度—std.timestd.logstd.Progress第47章
  • 第48章:进程与环境—std.processstd.posix第48章
  • 第49章:压缩与归档—std.compressstd.tarstd.zip第49章
  • 第50章:随机、数学与哈希—std.Randomstd.mathstd.crypto第50章
  • 第51章:内存与元数据工具—std.memstd.meta第51章
  • 第52章:调试与 Valgrind—std.debugstd.valgrind第52章

每章都提供代码示例、API 演练和实用指南。使用此索引直接跳转到你需要的模块。

注意事项与限制

  • 此索引反映 Zig 0.15.2。未来版本可能会重新组织模块或重命名导出。v0.15.2
  • 并非所有标准库组件都是稳定的——有些被标记为实验性的,或者在不同版本之间可能会有破坏性更改。
  • 编译器自身的内部结构(std.zig.*std.Build.*)是高级主题。在深入研究 AST 操作之前,先从面向用户的 API(如集合和 I/O)开始。zig

练习

  • 运行 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.zigfmt/)。文件通常重新导出目录的内容或提供高级 API。fmt.zig
  • 标准库包含包管理器或注册表集成(那是外部工具)。它专注于语言级实用程序和操作系统抽象。
  • 第三方库不是 std 的一部分。你将使用 build.zig.zonstd.Build.dependency() 来获取它们。

Help make this chapter better.

Found a typo, rough edge, or missing explanation? Open an issue or propose a small improvement on GitHub.