# 标准库
标准库(stdlib)是编译进每个 Deft 运行时的一组原生函数
(在 Zig 中实现于 `src/host/plugins/` 与
`src/host/stdlib/`),在任何脚本运行之前完成注册。它们无需
导入,且在每种宿主中都可用——`deft` 脚本二进制、
`retro`、`retra` 和 `hydra`。
不要将标准库与 stdext(`deft/stdext`)混淆,后者是
Deft 语言的扩展包,提供 `html`、`markdown`、`syntax`、
`semantic`、主题以及 TUI 基础设施。stdext 像任何
其他包一样导入(见
模块与导入);标准库
函数则直接可用。
本类别是按命名空间组织的目录——每个函数族一页。集合函数的
语言级语义见集合、
惰性序列、
转换器 和
错误处理。
## 如何阅读本页
每条条目列出函数名、参数形式和简要用途。
调用的规范形式取决于上下文——见
语法与风格。快速规则:
- 裸名称适用于语句位置的顶层调用:
`echo $x`, `incr i`。
- 后缀 `$var(call)` 适用于变量上的单参数调用:
`$x(len)`, `$xs(first)`。
- 前缀 `[name args]` 是规范形式,在较大的
表达式中或进行斜杠命名空间调用时必须使用:
`[fs/read "path"]`, `[sqlite/query $db "sql"]`。
## 函数族
| 页面 | 内容 |
|---|---|
| I/O | `echo`, `puts`, `gets`, `open`, `close`, `log`——通道与流 |
| 数学 | 裸数值动词以及专门化的 `math/` 命名空间 |
| 字符串 | 核心字符串操作、显示宽度布局、原始字节 |
| 类型 | `type`, `is?`、谓词、强制转换、元数据 |
| 结果 | `ok` / `err`、谓词、`unwrap`、`throw` |
| 引用 | 可变状态单元与监视 |
| 列表 | 持久化列表操作 |
| 映射 | 持久化映射操作、带标签映射、嵌套访问 |
| 数组 | 可变数组 |
| 集合 | 集合操作 |
| 序列函数 | 惰性 `map` / `filter` / `reduce` 及同类函数 |
| 实用工具 | `identity`, `apply`, `curry`, `eval`, `reload`, `pretty` |
| 字符 | 字符分类谓词 |
| 时钟 | TCL 风格的时间与格式化 |
| 正则表达式 | PCRE2 正则表达式 |
| 日志 | 分级的 `log/*` 动词 |
| 文件系统 | `fs/*`——读取、写入、监视、路径 |
| 操作系统 | `os/*`——进程、环境、子进程、信号 |
| 数据格式 | `json/*` 和 `yaml/*` |
| 加密 | 哈希、HMAC、编码、对称加密 |
| 压缩 | gzip、tar 和 tarball 辅助函数 |
| 主题 | 加载、编辑和保存主题文件 |
| 内省 | `deft/*`, `info/*`, `capture/*`, `capabilities` |
| 任务 | 流与 future 消费者动词 |
## 拥有独立指南的命名空间
有几个命名空间足够大,其手册章节与所属的平台、网络或工具主题
放在一起:
| 命名空间 | 指南 |
|---|---|
| `vfs/*` | VFS |
| `sqlite/*` | SQLite |
| `config/*` | 配置 |
| `pub/*` | 发布/订阅 |
| `runtime/*`, `gc/*` | 运行时 |
| `rpc/*` | RPC |
| `pg/*` | PostgreSQL |
| `net/*` | TCP/UDP |
| `http/ws-*` | WebSocket |
| `dns/*` | DNS |
| `http/*` (client) | HTTP 客户端 |
| `http/*` (server) | HTTP 服务端 |
| `mcp/*` | MCP |
| `dialog/*` | 对话框 |
| `tui/*`, `draw/*`, `surface/*`, `scene/*`, `gl/*`, `color/*`, `clipboard/*`, `editor/*`, `term/*` | TUI 概览, 图形 |
| `pkg/*` | 包 |
| `debug/*` | 调试服务器 |
| `ffi/*` | FFI |
较小的命名空间(`assert/*`, `keymap/*`, `keyval/*`, `lang/*`,
`uuid/*`, `bin/*`, `image/*`, `dbus/*`, `worker/*`, `import/*` 以及
其余部分)在 Help 应用的 Reference 标签页中按符号记录,
与源码树中的 `packages/help/docs/` 文件并列。
## 可用性
核心命名空间编译进每个构建。少数几个受开关控制:
- TUI 宿主(`retro`、`retra`,以 `-Denable-tui=true` 构建)添加
`tui/*`, `draw/*`, `surface/*`, `scene/*`, `gl/*`, `color/*`,
`clipboard/*`, `editor/*` 和 `term/*` 命名空间。
- FFI 构建(`-Dffi=true`)添加 `ffi/*`。
- `dialog/*` 在所有地方都存在,但脚本二进制在
stdin/stdout 上渲染它,而 TUI 宿主绘制真正的对话框。
## 在运行时发现标准库函数
[capabilities] # what's compiled in [info/modules] # what's loaded [info/defs] # defs in the current ns
要获取最新的列表,权威来源是代码库中
`src/host/plugins/` 和 `src/host/stdlib/` 下的插件文件。
插件注册表在构建时自动生成。