AOT 数值边界与浮点/多模块状态(1.7.0-dev / v4.38)
English summary. AOT backend status: Linux x86-64 ELF only; full-64 VM integer support with staged AOT u64 (tag6/boxed i64/type-10), float/bool print parity, and AOT multi-module POC/POC2/POC3 (qbc v1..v4, POC-only WIP) are covered; threads/async/FFI/std.fs/unsupported sys_* fail loudly (build rc=5/no ELF or runtime trap). Windows/ARM64 have no AOT backend.
本页记录 Q+ 1.6.0-dev(spec v4.37)ELF AOT 后端的数值、打印与多模块状态。 AOT 后端仅 Linux x86-64;未支持能力一律 loud fail / runtime trap,不静默错值。
浮点字面量与打印
- 十进制 f64 正确舍入(v4.36 / 1.4.7):qboot lexer 保留 raw literal → native
sys_f64_bits_from_dec(任意精度正确舍入 + 严格 >DBL_MAX loud)→ qbc type12 raw bits; VM loader memcpy bits、AOT 构建期字节烘焙(无运行时重建)→ VM/AOT 逐位一致。 - 十六进制浮点(v4.36 / 1.4.8):C99
0x1.8p+1形式精确转换(>53 位 RNE;精确 >DBL_MAX 编译期 loud;下溢 ±0)→ 同 type12 raw bits;VM/AOT 逐位一致。限制:p 必需、raw literal ≤2048B、依赖宿主 C99 strtod。详见 hex float 页。 - AOT 浮点打印 parity(v4.36 起):
print_float为 bqvmmk_f64_to_str(x,buf,64,6)的 逐字节等价实现;p13_f64_casts已 parity(v4.29 随 boxed i64 完成)。 - 不得宣称:任意十进制正确舍入之外的格式/无边界;hex 任意宿主/任意长度/无 strtod 依赖。
AOT 多模块(POC3,A.13)
- AOT 工具接受 qbc v1..v4;v2+ 的 module/segment 元数据作为可选尾部解析并跳过;
- 双模块
modules_b8(app.util共享 struct + 跨模块函数)→ qbc v4 → AOT ELF, 输出与 VM 逐字节一致7 15; - POC3 增量(1.5.0):符号/导入导出 POC、
modules_b10parity18 2.500000、泛型 Box parity、ELF 级缓存 POC(HIT=2/MISS=2); - POC 限制:单层跨模块调用(依赖扁平化 global function index)、单共享 struct、 无增量缓存/完整符号模型/AOT
module:line;v2 C-lite 仍 AOT loud; - 不是 AOT-native 2.0:完整 2.0 设计评估 6–8/9–13 周 HIGH,未实现。 详见 AOT 多模块 POC 页 与
docs/AOT_NATIVE_MODULES_2.0_DESIGN.md。
u64 bitwise(v4.36)
& | ^ ~ << >> 对 raw u64;<< wrap、>> 逻辑右移;计数 clamp [0,63];结果无符号打印; u64×非字面量 signed 仍 TC9 loud;float/bool/nil 未放开;VM/AOT parity。详见 u64 bitwise 页。
AOT 网络可行性(结论 B,v1.9.0)
docs/AOT_NET_FEASIBILITY.md 结论:本轮不交付 AOT 网络。已验证 VM parity、freestanding syscall helper(2,167B/0 reloc)与 codegen 原型可行,但修改 codegen 后自举 AOT 工具 SIGSEGV、 TOOL_FIXED=NO,不满足自举固定点/可信工具链要求。当前 AOT 对 sys_net_*/std.net 保持 loud(AOT_ABORT/UNSUPPORTED,不写 ELF);Windows/ARM64 E_UNSUPPORTED(-8)。 AOT 仍不提供网络,不得宣称 AOT 网络支持。
仍生效的边界
- i64 boxed pool(v4.30 扩至 4096)超限 loud(
AOT_UNSUPPORTED_I64_CONST_POOL);早前的AOT_UNSUPPORTED_I64_CONST常量范围守卫仍作为历史边界(type-1 越界常量改 boxed;类型-10 指数常量已由 v4.30 烘焙); - u64 bitwise 语言层明确不支持(TC20 loud);混合非字面量 i64/u64 TC9 loud; u64 上下文负字面量 TC15 loud;std.io
sys_svc运行期 loud trap; - A5 不是无条件 full-u64:p13/p01/p13f/aot_i64 n01–n05 已 parity,但上述残差仍文档化;
- AOT 对 threads/async/FFI、std.fs、未支持
sys_*一律 loud;AOT ELF 仅 Linux x86-64; - Windows AOT 未实现(spike3 探索 4–6/6–9 周 MEDIUM-HIGH,1.5 建议暂缓;见 Windows AOT spike3 页);不得称平台可用。
复跑
- 语言树:
src/tests/aot_float/(p01..p06、n04)、src/tests/aot_i64/、src/tests/aot_u64/、modules_b8、tools/test.sh; - 发布门禁:
release_gate.sh --full <tar>的 AOT 数值边界项必须 PASS(VM/AOT 一致或 AOT loud)。 最终 tar sha 以官方发布记录为准(候选164bf000…)。
AOT 网络支持子集(v1.10.0-dev POC)
- AOT ELF 支持 TCP loopback:
sys_net_socket/bind/listen/accept/connect/send/recv/close/local_port(native id 200–208 + sys_env_get 251)。 - opt-in
QPLUS_NET_REAL=1;默认 -8 E_UNSUPPORTED;AOT fd 为 raw OS fd(VM 语言 slot 为 opaque,不互换)。 - 仅 Linux x86-64 阻塞 IPv4 loopback;UDP/nonblocking/async/poll 运行期 -8;无 DNS/TLS/公网;非生产可用。
AOT 网络 v2:UDP/超时/边界(1.11/v1.12 文档)
- AOT ELF:std.net TCP 公共包装(native 200–208+251)+ UDP 基础子集(native 210–214)。 实测 parity:
AOT_NET_STD_OK 2 4 112 105 110 103(TCP)/AOT_NET_UDP_OK 4 112 105 110 103(UDP); opt-inQPLUS_NET_REAL=1,默认 -8。 - 超时/nonblocking/poll/epoll/async:AOT 一律 -8(无 VM io_wait 事件循环/任务 fiber 集成, 避免不一致事件语义);Phase6
set_rcvbuf等新 sys 运行期 -8、AOT 编译不崩溃。 - AOT fd=raw OS fd(VM 语言 slot opaque、不互换);UDP peer 表 fd<2048;bump 临时缓冲不释放(POC); 仅 Linux x86-64 阻塞 IPv4 loopback;无 DNS/TLS/公网/异步;非生产。
- 文档:AOT_NET_POC · NET_IMPLEMENTATION_PHASE6 · STD_API_NET。1.12 文档预览(spec v4.43 TBD;基线 1.11.0-dev/v4.42)。
AOT 网络 Phase3(v1.12.0-dev)
- AOT UDP timeout/nonblock(native 215/216)+ TCP accept timeout;TCP _nb/poll/epoll/async 仍 -8; AOT 网络仅 TCP/UDP loopback 子集,无 DNS/TLS/公网/生产。