标准库
使用字节、文字、文件、网络、套接字、进程、资源等 25 个标准模块。
标准库通过标准:<模块名>导入。公开 API 在参考树解释器与独立 VM 中保持一致,并参与静态类型检查。
yanxu 标准库 --json可取得格式 1 的机器清单,其中记录每个成员的签名、确定性、平台限制、错误类别和所需权限;核心仓库stdlib/api-v1.json是审计真源。
引「标准:编码」为 编码;
引「标准:统计」为 统计;
定 密文:文 为 编码.十六进制(「言序」);
言 编码.解十六进制(密文);
言 统计.平均(【1,2,3,4】);文字与数学
| 模块 | 成员 |
|---|---|
文字 | 修剪(文)、分割(文, 文)、替换(文, 文, 文)、始于(文, 文)、终于(文, 文)、大写(文)、小写(文)、字符列(文)、联结(列, 文) |
数学 | 圆周率、绝对值(数)、平方根(数)、幂(数, 数)、下取整(数)、上取整(数)、四舍五入(数)、正弦(数)、余弦(数)、最小(数, 数)、最大(数, 数) |
平方根拒绝负数。数学函数只接受有限数;联结要求列或元组中的每一项都是文字。
字节串
字节模块提供从文字/转文字/长度/切片/拼接/查找/从数列/转数列。字节串不可变、按内容相等,长度和索引均以实际字节为单位;无效 UTF-8 解码返回BYTES_UTF8。完整示例和上限见字节串与二进制 I/O。
时间、文件与环境
| 模块 | 成员 |
|---|---|
时间 | 今()返回 Unix 秒,毫秒()返回 Unix 毫秒,等待(数)暂停 0 至 60 秒 |
文件 | 读取/写入/追加文字,读取字节/写入字节/追加字节二进制,状态/存在/目录查询 |
环境 | 读取(文): 文?、存在(文): 理、当前目录/系统/架构(): 文、参数(): 列<文> |
文件模块使用调用进程可见的路径,写入与追加返回写入的 UTF-8 字节数;目录按名称排序。环境变量不存在时环境.读取返回空,非 UTF-8 值会产生可捕获的运行错误。
路径
路径模块提供合并(文, 文)、父级(文): 文?、文件名(文): 文?、扩展名(文): 文?、是否绝对(文): 理与规范化(文): 文。
规范化只消去.和可折叠的..,不会访问文件系统或解析符号链接,因此也可安全处理尚不存在的路径。
引「标准:路径」为 路径;
言 路径.规范化(「篇章/旧/../诗经.yx」);
言 路径.扩展名(「诗经.yx」);进程与应用资源
| 模块 | 成员与边界 |
|---|---|
进程 | 执行(程序, 参数, 工作目录, 超时毫秒)返回状态、标准输出和标准错误;受进程权限、全程超时与输出上限保护 |
资源 | 读取字节/读取文字/目录只读访问清单声明资源;YXB 运行时读取归档内嵌内容 |
命令行参数继续由环境.参数()读取。源码模式下,资源只允许读取[资源]声明的目录;YXB 构建会把可达资源写入归档,所以部署时无需携带原始资源目录。进程不会继承依赖包的权限,应用必须在自己的清单显式授权。
JSON、CSV 与网络
| 模块 | 成员 |
|---|---|
JSON | 解析(文): 任意、序列化(任意): 文 |
CSV | 解析(文): 列<列<文>>、序列化(列<列<文>>): 文 |
网络 | 获取/发文、文字请求、支持首部和二进制正文/响应的请求字节 |
CSV 解析支持 CRLF、引号字段、字段内逗号与换行,以及用两个引号表示一个引号。格式错误会给出明确诊断。
原生网络模块支持 HTTP/HTTPS、根证书验证、HTTP/1.1 分块传输与关闭定界正文。获取/发文保留简洁签名,采用 10 秒全程超时和 4 MiB 响应上限;非成功状态、超时、TLS、超限与非 UTF-8 正文都会成为带稳定NET_*代码的结构化错误。1.1.3 起,每次重定向都重新授权,DNS 后复查真实 IP,解析、连接与传输共用同一截止时间。WASI 不隐式获得网络传输能力。
请求字节(方法,地址,首部,正文,超时毫秒,最大字节)接受典<文,文>和字节串?,返回典中的正文为字节串。运行时拒绝 CRLF、非法首部以及调用方伪造的Host/Content-Length/Transfer-Encoding/Connection等首部,并在跨源重定向时移除授权和 Cookie。
引「标准:CSV」为 CSV;
定 表:列<列<文>> 为 CSV.解析(「姓名,诗句\n子衿,\"青青子衿,悠悠我心\"」);
言 表【1】【1】;需要自定义预算或读取状态/首部时使用请求:
引「标准:网络」为 网络;
试 则
定 响应:典<文,任意> 为 网络.请求(
「GET」,「https://example.com」,「」,5000,1048576
);
言 响应【「状态」】;
言 响应【「地址」】;
言 响应【「首部」】;
言 响应【「正文」】;
救 所误 则
言 所误.代码;
言 所误.消息;
终超时和大小参数必须是安全正整数;大小按响应正文的字节数计算,超过上限会完整失败而不是返回截断正文。错误代码表见错误处理。
套接字
套接字是原生平台的低层 TCP/UDP I/O 模块。除既有文字 API 外,1.1.4 增加发送字节/接收字节/精确读取/UDP发送字节至/UDP接收字节自/关闭写端/TCP无延迟。外连、TCP 监听和 UDP 绑定使用三项独立权限,DNS 解析后还会复查真实 IP。
所有阻塞入口都使用调用级毫秒超时,单次接收还受 4 MiB 硬上限约束;失败使用稳定SOCKET_*代码。TCP 分帧、UDP 截断拒绝、UTF-8 边界、完整签名和服务端示例见套接字指南。
哈希、编码与统计
| 模块 | 成员 |
|---|---|
哈希 | SHA256(文): 文、HMACSHA256(字节串, 字节串): 字节串、恒时相等(字节串, 字节串): 理 |
编码 | 十六进制(文)、解十六进制(文)、百分号(文)、解百分号(文) |
统计 | 总和(列<数>)、平均(列<数>)、中位数(列<数>)、方差(列<数>)、标准差(列<数>) |
编码以 UTF-8 字节为基础,错误长度、非法数字或非 UTF-8 解码结果都会报错。方差使用总体方差(除以 N);除总和外,空数据会报错,所有统计数据都必须是有限数。
1.0 确定性纯函数模块
1.0 稳定集合中的四个纯函数模块不读取宿主状态、不需要权限,并在树解释器与 VM 中共享同一算法。
| 模块 | 成员 |
|---|---|
随机 | 确定性小数/整数/布尔,以及操作系统 CSPRNG 安全字节(长度): 字节串 |
标识 | 稳定UUID(文): 文、是否UUID(文): 理、稳定短码(文, 长度): 文 |
模板 | 插值(模板, 占位名, 值): 文、转义HTML(文): 文、反转义HTML(文): 文 |
校验 | 电子邮件(文): 理、IPv4(文): 理、十六进制色(文): 理、标识符(文): 理 |
随机是显式种子的确定性伪随机模块:种子和整数边界须在安全整数范围内,整数使用半开区间[下界, 上界)。稳定UUID从 SHA-256 生成 RFC 9562 版本 8 UUID;相同文字总是得到相同结果。稳定短码允许 4 至 64 位十六进制长度。
引「标准:随机」为 随机;
引「标准:标识」为 标识;
引「标准:模板」为 模板;
引「标准:校验」为 校验;
定 标号:文 为 标识.稳定UUID(「言序」);
言 随机.整数(42,10,20);
言 模板.插值(「问{{name}}安」,「name」,「子衿」);
言 校验.电子邮件(「hello@yanxu.dev」);模板.插值替换所有完全匹配的 ASCII {{占位名}};若插入外部文字到 HTML,应先用转义HTML。邮件校验有意采用常见 ASCII 地址子集,不声称覆盖完整 RFC 邮箱语法;IPv4 拒绝多余前导零,十六进制色接受 3、4、6 或 8 位形式。
1.1 Base64、正则、URL 与日期
1.1 新增的四个模块同样是确定性、全平台、零宿主权限模块;纯 URL 解析不会获得或发起网络访问。
| 模块 | 成员 |
|---|---|
Base64 | 编码(文): 文、解码(文): 文、网址编码(文): 文、解网址编码(文): 文 |
正则 | 匹配(模式, 文字): 理、首项(模式, 文字): 文?、替换全部(模式, 文字, 替换): 文、分割(模式, 文字): 列<文> |
URL | 是否合法(文): 理、协议(文): 文、主机(文): 文?、端口(文): 数?、路径(文): 文、查询值(文, 名): 文?、合并(基址, 相对址): 文 |
日期 | 是否合法(文): 理、是否闰年(年): 理、加天(日期, 天数): 文、相差天数(开始, 结束): 数 |
引「标准:Base64」为 Base64;
引「标准:正则」为 正则;
引「标准:URL」为 URL;
引「标准:日期」为 日期;
言 Base64.解码(Base64.编码(「言序」));
言 正则.首项(「[0-9]+」,「版本 1.1.1」);
言 URL.合并(「https://docs.yanxu.dev/reference/」,「../standard-library」);
言 日期.加天(「2026-07-14」,30);Base64.网址编码使用 URL 安全字母表且不写=填充,两个解码入口都要求结果是 UTF-8。正则采用 Unicode 感知的线性时间引擎,不支持反向引用或环视;替换文字中的$0、$1和$名称可引用捕获,$$产生字面美元符号。
除URL.是否合法外,非法 URL 会产生可捕获错误。端口只返回地址中显式写出的端口;查询值返回第一个同名值并完成百分号解码,无对应项时返回空。路径保留 URL 的百分号编码形式。
日期只接受0001-01-01至9999-12-31的YYYY-MM-DD公历形式。年份和加天数量必须是安全整数;相差天数(开始, 结束)返回“结束减开始”,结束更早时为负数,任何越界运算都会明确报错。
测试
测试.断言(理, 文)、测试.相等(任意, 任意)和测试.非空(任意, 文)用于在言序规格中主动失败。更完整的目录级过滤、并发、超时、预期失败和 JSON 报告见命令行工具。