豫言操作系统底层接口之基础:状态码、时钟、随机、参数与环境、退出、中断、平台探测;无垃圾回收,值只有 32 位整数。
源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。
# 豫言操作系统底层基础 0.1.0 状态:草案。文言本见[文言版](规范.文言.md)。通用规则见[调用约定](../调用约定.汉语.md)。 ## 范围 全树共用的状态码表,以及最基本的系统查询:时钟、随机、命令行参数与环境变量、退出、中断标志、平台探测、处理器数。本包依赖 `底层库`,是本树的根,其余各包都(直接或间接)依赖它。 ## 时钟(`时钟。接口。豫`) | 函数 | 参数 | 作用 | | --- | --- | --- | | 读单调纳秒 | 出 | 单调时钟的纳秒数,8 字节 | | 读墙钟纳秒 | 出 | 自 1970-01-01 UTC 起的纳秒数,8 字节;没有实时钟返回 58 | | 取时钟精度 | 时钟号, 出 | 时钟号 0 为墙钟、1 为单调时钟;精度以纳秒计,8 字节;时钟号不认识返回 28 | | 取时区偏移 | 时低, 时高, 出 | 某时刻(自 1970 起的秒数,低高两参)本地时间相对 UTC 的秒数,有符号 4 字节;不支持返回 58,此时 shim 试读时区文件,再不行按 UTC | ## 随机(`随机。接口。豫`) | 函数 | 参数 | 作用 | | --- | --- | --- | | 填随机字节 | 址, 长 | 用密码学安全的随机字节填满缓冲;平台没有熵源返回 58 | ## 环境(`环境。接口。豫`) | 函数 | 参数 | 作用 | | --- | --- | --- | | 取参数块 | 缓冲址, 缓冲长, 出 | 命令行参数各以零结尾依次拼成块;出址写(总长,个数)共 8 字节;缓冲不足返回 61,并写入所需总长 | | 取环境块 | 缓冲址, 缓冲长, 出 | 环境变量 `名=值` 各以零结尾依次拼成块;其余同取参数块 | | 退出 | 码 | 以退出码结束本进程,不返回 | | 查询中断 | 出 | 读并清除中断标志(Ctrl-C),结果 0 或 1 | | 取平台 | 出 | 1 裸机、2 Linux、3 macOS、4 Windows | | 取处理器数 | 出 | 在线处理器数量 | ## 状态码 编号取 WASI preview1 errno 的子集,全树共用;括号里是 WASI 的名字。 | 码 | 名 | 码 | 名 | 码 | 名 | | --- | --- | --- | --- | --- | --- | | 0 | 成功 | 2 | 无权限(acces) | 3 | 地址已用(addrinuse) | | 6 | 暂不可用(again) | 8 | 句柄无效(badf) | 10 | 忙(busy) | | 14 | 连接被拒(connrefused) | 15 | 连接重置(connreset) | 19 | 配额已尽(dquot) | | 20 | 已存在(exist) | 21 | 地址错误(fault) | 22 | 文件过大(fbig) | | 27 | 被中断(intr) | 28 | 参数无效(inval) | 29 | 输入输出错误(io) | | 31 | 是目录(isdir) | 32 | 链接过多(loop) | 33 | 打开过多(mfile) | | 37 | 名字过长(nametoolong) | 43 | 无此设备(nodev) | 44 | 不存在(noent) | | 48 | 内存不足(nomem) | 51 | 无空间(nospc) | 52 | 未实现(nosys) | | 53 | 未连接(notconn) | 54 | 非目录(notdir) | 55 | 目录非空(notempty) | | 58 | 不支持(notsup) | 61 | 溢出,即缓冲不足(overflow) | 63 | 无特权(perm) | | 64 | 管道破裂(pipe) | 68 | 越界(range) | 69 | 只读文件系统(rofs) | | 70 | 不可寻址(spipe) | 71 | 无此进程(srch) | 72 | 已失效(stale) | | 73 | 超时(timedout) | 75 | 跨设备(xdev) | 76 | 无此能力,即越出授权(notcapable) | 其中 0、8、20、21、22、28、29、31、33、37、44、51、52、54、55、70 已被现有 WASI 库用过,并与 `node:wasi` 逐字对照验证。 **与 GC 接口 8 个系统错误变体的映射(建议):** | GC 系统错误 | 底层状态码 | | --- | --- | | 未获授权 | 2、63、69、76 | | 资源暂不可用 | 6、10、27 | | 资源已失效 | 8、15、53、64、72 | | 资源不存在 | 43、44、71 | | 资源已存在 | 3、20 | | 资源配额已尽 | 19、22、33、48、51 | | 输入无效 | 21、28、31、32、37、54、55、61、68、70、75 | | 宿主操作失败(带文字) | 其余(含 14、29、52、58、73) | ## 平台注记 - **裸机**:单调时钟由内核滴答(约 100 Hz)得,精度 10 ms;墙钟来自 RTC,只有秒精度;随机数的熵源未定(候选 virtio-rng、CPU 随机指令),此前 `填随机字节` 返回 58;中断标志即内核服务 27;退出即内核服务 18。 - **桌面**:时钟、随机、参数、环境、退出都是一次系统调用(Linux、macOS)或一个系统库函数(Windows);中断标志由信号处理(Linux、macOS)或控制台事件处理(Windows)置位。
# 豫言操作系统底层基础〇点一点〇 状:草案。汉语本见[汉语版](规范.汉语.md)。通用之规,见[调用约定](../调用约定.文言.md)。 ## 范围 全树共用之状态码表,及至基之系统询问:时钟、随机、命令行参数与环境变量、退出、中断之标、平台之探、处理器之数。本包依 `底层库`,为本树之根,余包皆(直或间)依之。 ## 时钟(`时钟。接口。豫`) | 函数 | 参 | 用 | | --- | --- | --- | | 读单调纳秒 | 出 | 单调之钟之纳秒数,八字节 | | 读墙钟纳秒 | 出 | 自一九七〇年正月朔日 UTC 起之纳秒数,八字节;无实时钟则返 58 | | 取时钟精度 | 时钟号, 出 | 钟号零为墙钟,一为单调之钟;精度以纳秒计,八字节;钟号不识则返 28 | | 取时区偏移 | 时低, 时高, 出 | 某刻(自一九七〇起之秒数,低高二参)本地时较 UTC 之秒数,有符号四字节;不支持则返 58,是时垫层试读时区之文件,不得则依 UTC | ## 随机(`随机。接口。豫`) | 函数 | 参 | 用 | | --- | --- | --- | | 填随机字节 | 址, 长 | 以密码学安全之随机字节填满缓冲;平台无熵源则返 58 | ## 环境(`环境。接口。豫`) | 函数 | 参 | 用 | | --- | --- | --- | | 取参数块 | 缓冲址, 缓冲长, 出 | 命令行参数各以零终,依次相连为块;出址书(总长,个数)共八字节;缓冲不足则返 61,并书所需总长 | | 取环境块 | 缓冲址, 缓冲长, 出 | 环境变量「名=值」各以零终,依次相连为块;余同取参数块 | | 退出 | 码 | 以码终本进程,不返 | | 查询中断 | 出 | 读而清中断之标(Ctrl-C),零或一 | | 取平台 | 出 | 一裸机、二 Linux、三 macOS、四 Windows | | 取处理器数 | 出 | 在线处理器之数 | ## 状态之码 编号取 WASI preview1 errno 之子集,全树共用;括号中为 WASI 之名。 | 码 | 名 | 码 | 名 | 码 | 名 | | --- | --- | --- | --- | --- | --- | | 0 | 成 | 2 | 无权(acces) | 3 | 址已用(addrinuse) | | 6 | 暂不可用(again) | 8 | 柄无效(badf) | 10 | 忙(busy) | | 14 | 连拒(connrefused) | 15 | 连重置(connreset) | 19 | 额尽(dquot) | | 20 | 已有(exist) | 21 | 址误(fault) | 22 | 文件过大(fbig) | | 27 | 见断(intr) | 28 | 参数无效(inval) | 29 | 输入输出误(io) | | 31 | 为目录(isdir) | 32 | 链接过多(loop) | 33 | 开启过多(mfile) | | 37 | 名过长(nametoolong) | 43 | 无此设备(nodev) | 44 | 无有(noent) | | 48 | 内存不足(nomem) | 51 | 无余地(nospc) | 52 | 未实现(nosys) | | 53 | 未连(notconn) | 54 | 非目录(notdir) | 55 | 目录非空(notempty) | | 58 | 不支持(notsup) | 61 | 溢,即缓冲不足(overflow) | 63 | 无特权(perm) | | 64 | 管破(pipe) | 68 | 越界(range) | 69 | 只读之文件系统(rofs) | | 70 | 不可寻址(spipe) | 71 | 无此进程(srch) | 72 | 已失效(stale) | | 73 | 超时(timedout) | 75 | 跨设备(xdev) | 76 | 无此能,即越出所授(notcapable) | 其中 0、8、20、21、22、28、29、31、33、37、44、51、52、54、55、70,已为今之 WASI 库所用,并与 `node:wasi` 逐字对照验之。 **与 GC 接口八系统错误变体之映(议):** | GC 系统错误 | 底层状态之码 | | --- | --- | | 未获授权 | 2、63、69、76 | | 资源暂不可用 | 6、10、27 | | 资源已失效 | 8、15、53、64、72 | | 资源不存在 | 43、44、71 | | 资源已存在 | 3、20 | | 资源配额已尽 | 19、22、33、48、51 | | 输入无效 | 21、28、31、32、37、54、55、61、68、70、75 | | 宿主操作失败(带文字) | 其余(含 14、29、52、58、73) | ## 平台之注 - **裸机**:单调之钟得诸内核滴答(约百赫),精度十毫秒;墙钟得诸 RTC,唯秒精度;随机之熵源未定(候选 virtio-rng、CPU 随机指令),此前 `填随机字节` 返 58;中断之标即内核服务二十七;退出即内核服务十八。 - **桌面**:时钟、随机、参数、环境、退出,皆一系统调用(Linux、macOS)或一系统库函数(Windows);中断之标,由信号之处理(Linux、macOS)或控制台事件之处理(Windows)置之。