Skip to content

[RFC] 0-kvspace: XValue head 重定:ref int8 多级指针 + storetype 收缩为 (bodycap,valuelen) + langtype 定长 #329

Description

@miaobyte

动机

kvlang 建立在 kvspace 之上:kvspace 是「key → value」的寻址模型,而传统计算机是「64 位地址 → 1 byte」。

本质上 /key:int32=10 里的 /key 本身就是指针,那么 /key 的 value 类型应当是 *int32。这意味着
所有变量(含绝对路径变量)的定义都应带 *,如 x:*int64 = 1;或者换个方向——所有变量 key 设值一律写作
*key = value*x:int64 = 1)。

另一条线索:kvlang 的 rwir/rwfunc 参数本质都是 key 访问(即指针),语言里根本不存在传值模型。目前
kvspaceSet 却包揽了大量不属于它的职责。

提案

一、ref(int8,重定语义)

含义
-1 扩展世界(@ext,真实值在 fs/gpu tensordata 等)
0 none(无值)
1 正常 key,即指针
>1 指针的指针,可无限叠加

约束:

  • runtime-c 的 rwir 只容许 ref=1 参与运算
  • ref=-1 仅由某些 runtime 的 rwir 支持
  • ref>1 必须先解引用

二、storetype(2×8 byte,收缩)

不再承载类型信息,只留 (bodycap, valuelen)——可看作文件的「容量」与「长度」。

三、langtype(定长 110 byte)

64/128 − 16 − 2 = 46……按定长头对齐:basekind 64 char/utf8 + dim/ndim。目前为字符串存储。

四、结构草案

typedef struct {
    uint8_t  headlenpow2; // 6 → headlen=64B;7 → 128B
    int8_t   ref;         // 0 inline / 1 pointer / -1 @extendworld / >1 ptr-of-ptr
    uint64_t bodylen;
    uint64_t bodycap;
    uint8_t  langtype[?]; // basekind、dim、ndim 等
    void    *body;
} xvalue;

head 固定 64 或 128 byte。

影响面

  • 线格式:XValue head 是三处 byte-identical 的权威(kvspace/include/kvspace/kvspace.h、kvspace-c、
    kvspace-durable/src/xvalue.rs),改动须三处同步
  • spec 条款03-类型系统/16-ptrhead 三正交维附录/03-类型表达式文法 等需先落条款
  • 跨仓:kvspace / kvspace-c / kvspace-durable / kvlang(layout + runtime-c)——属破坏性变更,需同步升 tag
  • 既有实现ref=2(现 @ext 取值)改 -1storetype 各编码器(NONE/ATOM/ARRAYND/index/extindex)需重写

待裁决

  1. 变量声明是否统一改 *T?还是保留现值语义、仅约定设值走 *key = v
  2. storetype 收缩后,各物理形态(ARRAYND 的 dims[]、index 的成员矩阵)迁往何处——langtype 还是 body 前缀?
  3. langtype 定长 110B 是否够(现有 kindexpr 串含 map 嵌套 / struct 原型路径)
  4. ref>1 的解引用规则与 * 的层数表达(现 wire 层 langtype 串不含 *
  5. 是否需要新增专用 rwir 承担「给 key 的 value 设值」,把 kvspaceSet 的僭越职责归还

备选方案

  • 保守方案:只把 ref 从 1B 扩为 int8、不动 storetype/langtype,先解决多级指针与 @ext 编码
  • 激进方案:head 全定长 128B,放弃 64B 档,换取 langtype 空间充裕

裁决记录

(讨论后回填)

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

    RFC需要讨论与决策的设计提案(含裁决记录)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions