本文档涵盖了 Bun 的字符串处理和文本编码系统,包括核心字符串操作工具、字符编码转换以及 TextEncoder 和 TextDecoder 的 Web API 实现。该系统支持各种文本编码(UTF-8、UTF-16、Latin-1、ASCII、Base64、Hex),并提供低级的 Zig 工具和高级的 JavaScript API。
有关特定于缓冲区数据的二进制数据处理,请参阅 缓冲区实现。有关 JavaScript/TypeScript 解析和 AST 操作,请参阅 解析器与 AST。
字符串处理系统分层构建,从低级 Zig 工具到 JavaScript Web API
字符串处理层
来源:src/string.zig48-56 src/bun.js/webcore/encoding.zig1-15 src/string_immutable.zig1-20
Bun 使用带标签的联合系统,以高效的字符串表示支持不同的底层存储类型
BunString 标签系统
来源:src/string.zig17-45 src/string.zig39-56
编码系统支持多种字符编码,并提供优化的转换路径
| 编码 | 内部名称 | 描述 | 支持级别 |
|---|---|---|---|
| UTF-8 | .utf8 | 标准 Unicode 编码 | 完整版 |
| UTF-16LE | .utf16le, .ucs2 | 小端序 UTF-16 | 完整版 |
| Latin-1 | .latin1 | ISO 8859-1, Windows-1252 | 完整版 |
| ASCII | .ascii | 7 位 ASCII 子集 | 完整版 |
| Base64 | .base64 | Base64 编码 | 完整版 |
| Base64URL | .base64url | URL 安全 Base64 | 完整版 |
| Hex | .hex | 十六进制编码 | 完整版 |
来源:src/bun.js/webcore/encoding.zig506-514 src/bun.js/webcore/EncodingLabel.zig2-50
核心字符串实用工具提供具有性能优化的基本操作
核心字符串操作
来源:src/string_immutable.zig29-50 src/string_immutable.zig470-500 src/string_immutable.zig703-755
编码系统提供不同字符编码之间的转换,并针对常见情况进行了优化
编码转换流程
来源:src/bun.js/webcore/encoding.zig252-316 src/bun.js/webcore/encoding.zig354-403
TextDecoder Web API 实现支持流式解码,并具有适当的错误处理
TextDecoder 架构
来源:src/bun.js/webcore/TextDecoder.zig1-20 src/bun.js/webcore/TextDecoder.zig101-150
TextEncoderStreamEncoder 处理流式 UTF-8 编码,并进行代理项管理
TextEncoder Stream 流程
来源:src/bun.js/webcore/TextEncoderStreamEncoder.zig20-33 src/bun.js/webcore/TextEncoderStreamEncoder.zig35-45
字符串系统通过 C++ 绑定和 WebCore 实现与 JavaScript 集成
JavaScript 绑定架构
来源:src/bun.js/bindings/BunString.cpp45-70 src/bun.js/webcore/encoding.classes.ts3-35 src/js/builtins/TextEncoderStream.ts1-15
字符串处理与路径解析集成,用于文件系统操作
路径字符串处理
来源:src/resolver/resolve_path.zig86-172 src/resolver/resolve_path.zig308-400 src/string_immutable.zig842-875
该系统包含多项针对常见字符串操作的性能优化
| 优化 | 实现 | 用例 |
|---|---|---|
| SIMD 字符串搜索 | bun.highway.indexOfAnyChar | 字符搜索操作 |
| 编译时字符串比较 | eqlComptimeCheckLen | 已知字符串常量 |
| 内联路径操作 | callconv(bun.callconv_inline) | 热路径函数 |
| StringOrTinyString | 31 字节内联存储 | 小型字符串优化 |
| 内存池 | allocators.BSSStringList | 字符串存储分配 |
来源:src/string_immutable.zig99-108 src/string_immutable.zig1018-1061 src/string_immutable.zig599-701