Skip to content

4-rwirext/json/扩展未随 #66 迁移 · 分隔符(opcode 名 + 成员 key + validateKey) #99

Description

@miaobyte

背景

#66 的实现 commit 0769a11(成员分隔符 .·)改了 layout / runtime / tutorial 共 22 个文件,但未触及 runtime-rwirext_example/go/json/。json 扩展仍整体停留在 . 时代,导致 json ↔ kvspace 互转在当前主干上完全不可用。

三处脱节:

位置 现状 应为
成员 key 前缀 path+"." path+"·"
注册 opcode 名 /lib/json.to/lib/json.from /lib/json·to/lib/json·from
validateKey 禁止字符 .,不含 · ·,放行 .

实测失效链:

  1. list(c, "/rt/x.") → kvspace-durable assert_dir 拒绝 → kvspace: index must end with /: /rt/scalar-obj. → 宿主进程 abort(另见 0-kvspace 的 ABI panic issue)。
  2. 注册名不匹配 → kvlang: vthread 1 error: NameError: rwfunc not found: json·to
  3. tutorial/json.kvtutorial/json_roundtrip.kv 仍写 json.to(...),layout 静默降级(另见 1-layout 的静默降级 issue)。

需求描述

json 扩展与 tutorial 全量迁移到 ·,并让 . 成为合法成员名字符——这正是 #66 换分隔符的收益:{"a.b":1}{"3.14":1} 应能无损往返。

预期结果

  • json·to / json·from/lib/ 下以 · 名注册,runtime 派发命中。
  • KV 成员 key 一律 p·k,与 kvspace OBJ_SEP、runtime MEMBER_SEP 同一约定。
  • validateKey 拒绝 / · [ ] \n \r \0 ‥ 与 ASCII 控制字符,放行 .
  • 两个 tutorial 用新语法跑通。

方案简述

本地已有最小修复补丁(未提交):json.go 引入 const sep = "·" 替换全部 path+".",opcode 名改 "json"+sep+"to"validateKey 调整禁止字符集;两个 tutorial .kv 同步。

修复后实测:json_roundtrip.kv 端到端输出与期望完全一致,Go 层往返用例 10/10、随机 300/300、key 边界 16/16(含 {"a.b":1}{"3.14":1} 通过,{"a·b":1} 正确拒绝),redis 与 shm 双后端一致。

遗留:edge_test.go 注释仍写 {"a.b":1}「应拒绝」,需同步为「合法」。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions