Chapter 43Stdlib Index

标准库索引(地图)

概述

在构建针对WASI和本机平台的可移植应用程序之后,第42章您现在站在Zig标准库的门槛前——这是一个精心策划的集合,包含大约70个顶级模块和30多个目录,涵盖数据结构、I/O、加密、压缩和编译器内部结构。std.zig

本章作为您的地图:一个导航索引,使您能够在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 namespace" STD["std (std.zig)"] end subgraph "Core Utilities" 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 "OS Abstraction" 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 "Filesystem" 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 "Memory Management" HEAP["heap.zig<br/>page_size_min"] ARENA["heap/arena_allocator.zig"] DEBUG_ALLOC["heap/debug_allocator.zig<br/>DebugAllocator"] end subgraph "Debugging" 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 Interop" C["c.zig<br/>timespec, fd_t, mode_t"] C_DARWIN["c/darwin.zig"] C_FREEBSD["c/freebsd.zig"] end subgraph "Testing & Process" TESTING["testing.zig<br/>allocator, expect"] PROCESS["process.zig<br/>getCwd, exit"] PROGRESS["Progress.zig<br/>Terminal updates"] end subgraph "Network & Other" 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.zigarray_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)读/写器接口;参见Io.zigIo/
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.RandomPRNGs: 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内存实用程序:split, tokenize, copy, search;参见mem.zigmem/
std.meta类型自省帮助程序;参见meta/meta.zig

调试和Valgrind

涵盖于:第52章

模块/路径用途
std.debug恐慌、堆栈跟踪、DWARF信息;参见debug/
std.valgrindValgrind集成(memcheck, cachegrind);参见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.elfstd.machostd.coffstd.pdb二进制格式解析器;参见各自的.zig文件
std.dwarfDWARF常量;参见dwarf/
std.Thread线程原语;在第29章中涉及
std.atomicstd.once原子操作,一次性初始化;参见第29章
std.httpstd.netstd.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#Command-line-flags

  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.Progress47
  • 第48章:进程和环境——std.processstd.posix48
  • 第49章:压缩和归档——std.compressstd.tarstd.zip49
  • 第50章:随机、数学、哈希——std.Randomstd.mathstd.crypto50
  • 第51章:内存和元数据实用程序——std.memstd.meta51
  • 第52章:调试和Valgrind——std.debugstd.valgrind52

每一章都提供了代码示例、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.