概述
在构建针对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.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) | 读/写器接口;参见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 | PRNGs: 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.zig,mem/ |
std.meta | 类型自省帮助程序;参见meta/,meta.zig |
调试和Valgrind
涵盖于:第52章
| 模块/路径 | 用途 |
|---|---|
std.debug | 恐慌、堆栈跟踪、DWARF信息;参见debug/ |
std.valgrind | Valgrind集成(memcheck, cachegrind);参见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。#Command-line-flags浏览:使用
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()来获取它们。