主 issue(契约与总纲):array2d/kvspace#12
kvspace-c(shm)实现 memindex 定宽排序矩阵,与 durable 参考实现逐字节对齐。
格式(见 kvspace#12)
memindex(kind=index):kindexpr=[N,M]index + body N×M(每行 UTF-8 + NUL 补齐到 M),全表 cmp_coord 排序。
改动点
- memindex(
p· 处 kind=index 值)body 编码由 offset 索引数组改为 [N,M] 矩阵:几何写入 XValueHead 的 [dims](N、M),body 纯 N×M 行。
- 成员增删:按
cmp_coord 有序插入 / 删除并重建矩阵、重算 M(shm 侧同尺寸可原地覆写,变尺寸走新分配)。
listlen 读 head N(O(1),不碰 body);listat(idx) 取单行 body[idx*M..] 去 NUL(O(1));成员存在性 cmp_coord 二分。
- 比较器
cmp_coord 与 durable 语义一致(数组/map 坐标 row-major、object 字符串键字典序)。
- extindex 并入同一矩阵:body 改
[N,M]extindex head + 头部变长 ext_path + 尾部 N×M 矩阵(childs,cmp_coord 有序);off=body_len−N*M,ext_path=body[..off]、childs 矩阵=body[off..];listat/listlen/二分与普通 index 共用;list(expand_ext=true) 本地矩阵与 base(/lib/<func>/ index)双侧有序归并、本地遮蔽去重。栈帧 churn 增量重建 O(N) 可接受(帧局部小而有界),ext_path 头部固定不被矩阵重建触碰。
验证
- kvspace-c 自带 tutorial-c;
- kvlang tutorial shm 全回归;
- memindex blob 与 durable(fs/redis)逐字节一致。
主 issue(契约与总纲):array2d/kvspace#12
kvspace-c(shm)实现 memindex 定宽排序矩阵,与 durable 参考实现逐字节对齐。
格式(见 kvspace#12)
memindex(kind=index):
kindexpr=[N,M]index+ bodyN×M(每行 UTF-8 + NUL 补齐到 M),全表cmp_coord排序。改动点
p·处 kind=index 值)body 编码由 offset 索引数组改为[N,M]矩阵:几何写入 XValueHead 的[dims](N、M),body 纯N×M行。cmp_coord有序插入 / 删除并重建矩阵、重算 M(shm 侧同尺寸可原地覆写,变尺寸走新分配)。listlen读 head N(O(1),不碰 body);listat(idx)取单行body[idx*M..]去 NUL(O(1));成员存在性 cmp_coord 二分。cmp_coord与 durable 语义一致(数组/map 坐标 row-major、object 字符串键字典序)。[N,M]extindexhead + 头部变长 ext_path + 尾部N×M矩阵(childs,cmp_coord 有序);off=body_len−N*M,ext_path=body[..off]、childs 矩阵=body[off..];listat/listlen/二分与普通 index 共用;list(expand_ext=true)本地矩阵与 base(/lib/<func>/index)双侧有序归并、本地遮蔽去重。栈帧 churn 增量重建 O(N) 可接受(帧局部小而有界),ext_path 头部固定不被矩阵重建触碰。验证