动机
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-ptr、head 三正交维、附录/03-类型表达式文法 等需先落条款
- 跨仓:kvspace / kvspace-c / kvspace-durable / kvlang(layout + runtime-c)——属破坏性变更,需同步升 tag
- 既有实现:
ref=2(现 @ext 取值)改 -1;storetype 各编码器(NONE/ATOM/ARRAYND/index/extindex)需重写
待裁决
- 变量声明是否统一改
*T?还是保留现值语义、仅约定设值走 *key = v?
storetype 收缩后,各物理形态(ARRAYND 的 dims[]、index 的成员矩阵)迁往何处——langtype 还是 body 前缀?
- langtype 定长 110B 是否够(现有 kindexpr 串含 map 嵌套 / struct 原型路径)
ref>1 的解引用规则与 * 的层数表达(现 wire 层 langtype 串不含 *)
- 是否需要新增专用 rwir 承担「给 key 的 value 设值」,把
kvspaceSet 的僭越职责归还
备选方案
- 保守方案:只把
ref 从 1B 扩为 int8、不动 storetype/langtype,先解决多级指针与 @ext 编码
- 激进方案:head 全定长 128B,放弃 64B 档,换取 langtype 空间充裕
裁决记录
(讨论后回填)
动机
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 等)01>1约束:
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。目前为字符串存储。四、结构草案
head 固定 64 或 128 byte。
影响面
kvspace/include/kvspace/kvspace.h、kvspace-c、kvspace-durable/src/xvalue.rs),改动须三处同步03-类型系统/16-ptr、head 三正交维、附录/03-类型表达式文法等需先落条款ref=2(现 @ext 取值)改-1;storetype各编码器(NONE/ATOM/ARRAYND/index/extindex)需重写待裁决
*T?还是保留现值语义、仅约定设值走*key = v?storetype收缩后,各物理形态(ARRAYND 的dims[]、index 的成员矩阵)迁往何处——langtype 还是 body 前缀?ref>1的解引用规则与*的层数表达(现 wire 层 langtype 串不含*)kvspaceSet的僭越职责归还备选方案
ref从 1B 扩为 int8、不动 storetype/langtype,先解决多级指针与 @ext 编码裁决记录
(讨论后回填)