现状
tutorial 里指针字段一律写成字符串(next:[]char/utf32=""、left/right:[]char/utf32),这是绕过 *langtype 未实装的 workaround。目标:直接写
struct TNode {
val:int64=0
left:*TNode=""
right:*TNode=""
}
三正交轴:设计支持,实现断链
* 是 ref 轴语法。left:*TNode = ref=1 + langtype=/lib/TNode + body 存目标 key(16-ptr.kv 已规定「* 前缀表 ref,layout 剥离后落成 head ref 独立字节」)。设计无缺口,但 layout 处理链是断的:
parse_type_raw(layout/src/parser.rs:466)把 * 当 Literal token 吞进类型串 → *int64 / *TNode。
expand_struct_refs(layout/src/langtype.rs:187 expand_atom)不识别 * → 落到 format!("/lib/{s}") = 损坏的 /lib/*int64 / /lib/*TNode。
valid_langtype(langtype.rs:173)无 * 分支 → 判非法;仅在有校验的位置触发:check_param_types(参数)+ 容器元素 → 报 unknown type ... (got "/lib/*TNode")、invalid langtype "[int64]·/lib/*TNode"。
- struct 字段 / 局部变量不过
valid_langtype,*T 蒙混过关但存成损坏的 /lib/*T,且从未被真正 deref。
- 全 layout 无一处剥离前导
* 置 head.ref(唯一 * 处理在 parser.rs:1955,是无关的 .* 动态成员写)。dump 显示 p:*int64=&x 降为纯 kv·abs(x)->p,slot 无 ref。
落地方案
1-layout
parse_type/parse_type_raw:识别前导 *(Literal "*")为 ref 轴 → 剥离并记 ref=1,base 保持干净后再 expand_struct_refs。
- field/param/local/return 槽的 head.ref 字节穿透(ffi.rs 已有
r#ref)。
valid_langtype 接收已剥离 base(或加 * 前缀分支)。
2-runtime
验收
- 094_inorder_traversal.kv 用
*TNode 通过(含 [int64]·*TNode 栈、root:*TNode 参数)。
- 12-struct 与 08-leetcode 链表例子
next:*Node 全绿(shm/fs/redis 193×3)。
关联:#283(&/kv·abs 产出指针值)、#199(具名 struct)。
现状
tutorial 里指针字段一律写成字符串(
next:[]char/utf32=""、left/right:[]char/utf32),这是绕过*langtype未实装的 workaround。目标:直接写struct TNode { val:int64=0 left:*TNode="" right:*TNode="" }三正交轴:设计支持,实现断链
*是 ref 轴语法。left:*TNode=ref=1+langtype=/lib/TNode+ body 存目标 key(16-ptr.kv 已规定「*前缀表 ref,layout 剥离后落成 headref独立字节」)。设计无缺口,但 layout 处理链是断的:parse_type_raw(layout/src/parser.rs:466)把*当Literaltoken 吞进类型串 →*int64/*TNode。expand_struct_refs(layout/src/langtype.rs:187expand_atom)不识别*→ 落到format!("/lib/{s}")= 损坏的/lib/*int64//lib/*TNode。valid_langtype(langtype.rs:173)无*分支 → 判非法;仅在有校验的位置触发:check_param_types(参数)+ 容器元素 → 报unknown type ... (got "/lib/*TNode")、invalid langtype "[int64]·/lib/*TNode"。valid_langtype,*T蒙混过关但存成损坏的/lib/*T,且从未被真正 deref。*置 head.ref(唯一*处理在 parser.rs:1955,是无关的.*动态成员写)。dump 显示p:*int64=&x降为纯kv·abs(x)->p,slot 无 ref。落地方案
1-layout
parse_type/parse_type_raw:识别前导*(Literal"*")为 ref 轴 → 剥离并记ref=1,base 保持干净后再expand_struct_refs。r#ref)。valid_langtype接收已剥离 base(或加*前缀分支)。2-runtime
*T槽时单跳类型检查:解析&x(≡kv·abs, [FEAT] 1-layout: & 一元前缀取址(&x ≡ kv·abs(x)) #283) 路径 → 确认目标 langtype = T;""空指针跳过。p·field按目标 head 解引用不变。验收
*TNode通过(含[int64]·*TNode栈、root:*TNode参数)。next:*Node全绿(shm/fs/redis 193×3)。关联:#283(
&/kv·abs 产出指针值)、#199(具名 struct)。