豫言 / 技术规范

本篇描述 4cdeca1 的实现。版本与适用边界见基线说明

基线与实现依据

本篇记录技术规范与现有实现的对应关系,供文档审阅与后续维护。正文须足以说明算法和接口;源码链接用于追溯,不代替正文中的规则。

据一:固定基线

本规范对应提交 4cdeca11600fed16338793a494b6eecaae94485a。语言语义、静态检查边界和平台 ABI 应分别理解:同一语言可以有不同后端表示,但两个原生对象要互操作,就必须遵守同一目标的值、调用和根管理契约。

ABI 兼容不要求同一优化器、同一临时变量名或逐字节相同的机器码。它要求消费者无需识别生产者,就能按约定读取其值、调用其函数、接收返回结果,并在异常与垃圾回收后继续运行。

据二:实现依据

文档主题 本基线源码 应核对的内容
词法 词法解析 扫描状态、空白、嵌套注释、字符串转义
数字 整数小数解析 逐位数字、分隔符、原始小数文本
结合关系 文言符集 68 条显式关系及顺序后备规则
声明 抽象语法分析 签名配对、自动递归、自由名称识别
名称 名称解析 局部与顶层次序、打开优先级、重导出身份
类型形成 类型类型检查 合法类型结构、类型应用限制
双向检查 类型检查工具对象类型检查 合成与检查的不同入口和错误条件
隐参 函数应用隐式参数合成 实参预读、期望类型、饱和限制
名义相等 模式合一结构比较 文件与名称决定身份,编号不是静态身份
调用降级 隐式参数擦除 源码足参检查与机器逐参调用的区别
闭包 正则前闭包转换 self、代码项、捕获环境
递归 递归节点闭包前变换 单槽自引用的建立及填充次序
栈与返回 代码生成准备 帧头、槽三返回、续延分派、安全点
机器代码 直接代码生成 两个 i128、原始布尔值、外调同步、musttail
符号 编译过程工具 源身份转义、全局与函数名
值布局 值编解码 类型位、长度位、负数编码、字节串布局
GC 垃圾回收器 根地址、转发、扫描和搬迁
运行入口 运行时栈异常 根帧、异常处理器、续延表及配置
WasmGC 网页汇编直生GC 运行时 引用类型、逐参函数、表索引、动态退出

据三:ABI 阅读示例

以文档约定描述,不另提供实现程序。设 C 是一个二参数源函数的闭包,S 是调用者帧:

  1. 源码的 C 于 a 于 b 先通过足参检查。
  2. 机器首先调用 C[0],新帧槽五放 C、槽六放 a;得到中间闭包 D。
  3. 返回代码把 D 放在调用者槽三,并设置槽四为恢复编号。
  4. 恢复后调用 D[0],槽五放 D、槽六放 b;这次返回最终结果。

源语言拒绝部分应用,与机器使用中间闭包没有矛盾;前者是接受规则,后者是 ABI。若重实现将 C 改成一次读取两个实参的闭包,却仍保留同一公共符号,旧调用者就不能正确使用它。

整数负一也有类似区别:低 64 位同为 ffffffffffffffff;C 构值的高 64 位为 ffffffffffffff02,LLVM 内建减法零扩构值的高 64 位为 0000000000000002。二者是同一语言整数,却不应按完整 i128 相等来比较。

据四:文档完整性准则

每个语法形式应有树构造和拒绝条件,每种核心表达式应有类型与求值规则,每个跨对象接口应有字段位置、宽度、实参次序、生命周期及调用者/被调用者责任。涉及兼容缺陷时,同时写明当前事实和可保证的范围。

审阅重点是陌生实现者是否仍需猜测:类型检查与运行时参数分组是否混淆,源路径与符号身份是否遗漏,GC 是否会移动局部持有地址,外调是否使用实际 C 签名。双语正文应表达相同条件,不能省略限制而产生两套规范。