菜单

字符串处理和文本编码

相关源文件

本文档涵盖了 Bun 的字符串处理和文本编码系统,包括核心字符串操作工具、字符编码转换以及 TextEncoderTextDecoder 的 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.latin1ISO 8859-1, Windows-1252完整版
ASCII.ascii7 位 ASCII 子集完整版
Base64.base64Base64 编码完整版
Base64URL.base64urlURL 安全 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 实现

TextDecoder Web API 实现支持流式解码,并具有适当的错误处理

TextDecoder 架构

来源:src/bun.js/webcore/TextDecoder.zig1-20 src/bun.js/webcore/TextDecoder.zig101-150

TextEncoder Stream 实现

TextEncoderStreamEncoder 处理流式 UTF-8 编码,并进行代理项管理

TextEncoder Stream 流程

来源:src/bun.js/webcore/TextEncoderStreamEncoder.zig20-33 src/bun.js/webcore/TextEncoderStreamEncoder.zig35-45

JavaScript 集成

字符串系统通过 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)热路径函数
StringOrTinyString31 字节内联存储小型字符串优化
内存池allocators.BSSStringList字符串存储分配

来源:src/string_immutable.zig99-108 src/string_immutable.zig1018-1061 src/string_immutable.zig599-701