背景
跨语言 core 方案已定:C ABI 是单一事实源,开发顺序永远是先 kvspace → 再 layout → 最后 runtime。kvspace 是地基。
现 kvspace-go 是 Go SDK,可嵌入性差:cgo/-buildmode=c-shared 会内嵌整套 Go runtime+GC(~2MB),cgo 指针规则禁止跨边界传含 Go 指针的复杂结构(AST/嵌套 slice/map 全受限),Python/Rust/C++ 调用方都要拖进 Go runtime。它不适合作跨语言可嵌入的存储基座。
需要一个 Rust 实现、暴露 C ABI、可被其它语言嵌入 的 kvspace,语义与现 kvspace-go 权威接口逐字节对齐,后端 redis/fs/s3(持久化优先,面向 agent 场景),替代 kvspace-go 成为权威实现。
需求描述
新建 kvspace-durable(仓库已建并 clone),Rust 实现 KVSpace:
- 接口对齐:
Get/Set/Del/DelTree/List/Watch/Mkindex/ExtIndex/DelExtIndex/Clear/DisConn + XValue 类型系统,与 kvspace-go 权威定义逐字节语义一致。
- XValue/TLV:严格按
xvalue.go 的 TLV 编码([kind_len][kind][ref][arr_flag][ndim][dims][raw_len][raw])与全部 kind(int/uint/float/bool/char 家族/dict/index/extindex/rwir/rwfunc/time/duration/scope/ptr)翻译。
- 后端:redis / fs / s3 三后端走同一 KVSpace trait,换后端零改动。redis 先做(对齐
redis/kvspace.go)。
- C ABI:cbindgen 出
kvspace.h,Go(cgo)/Py(cffi/pyo3)/C++(#include)/Rust(bindgen) 都经它调用,调用方不拖 Go runtime。
预期结果
- 一个 Rust lib(
staticlib+cdylib),cbindgen 出 kvspace.h。
- XValue/TLV 与 kvspace-go 逐字节 round-trip 一致(用同一组测试向量对 Go/Rust 双向比对)。
- redis 后端跑通 kvlang 的 tutorial 回归(kvlang 经 C ABI 调 kvspace-durable,替代 kvspace-go)。
- op-gpu/livebyte 能经 C ABI 直接嵌入 kvspace。
实现方式(铁律)
严格翻译 kvspace-go 每一个文件、每一行代码,像素级对齐(同 .claude/runtime-rust.md):
const.go → src/const.rs
xvalue.go → src/xvalue.rs
xvalue_*.go → src/xvalue_*.rs
kvspace.go → src/kvspace.rs (trait)
kvspace_common.go → src/kvspace_common.rs
conn.go → src/conn.rs
redis/kvspace.go → src/redis/kvspace.rs
redis/redis.go → src/redis/redis.rs
文件名、函数名、常量名一一对应;禁止凭想象写,先读 Go 对应文件再翻译。
依赖 / 关联
- 契约层三头之一:
kvspace.h(另两份 kvlayout.h / kvlang.h)。
- 参考
tlvcodec(已有 Rust+PyO3 跨语言管线),但 XValue 的 kind-TLV 按 kvspace-go 权威规范独立翻译,不复用其通用 TLV 格式。
- 后续 kvlayout(parser/lower)、kvlang(runtime)都建在此 kvspace 之上。
背景
跨语言 core 方案已定:C ABI 是单一事实源,开发顺序永远是先 kvspace → 再 layout → 最后 runtime。kvspace 是地基。
现
kvspace-go是 Go SDK,可嵌入性差:cgo/-buildmode=c-shared会内嵌整套 Go runtime+GC(~2MB),cgo 指针规则禁止跨边界传含 Go 指针的复杂结构(AST/嵌套 slice/map 全受限),Python/Rust/C++ 调用方都要拖进 Go runtime。它不适合作跨语言可嵌入的存储基座。需要一个 Rust 实现、暴露 C ABI、可被其它语言嵌入 的 kvspace,语义与现 kvspace-go 权威接口逐字节对齐,后端 redis/fs/s3(持久化优先,面向 agent 场景),替代 kvspace-go 成为权威实现。
需求描述
新建
kvspace-durable(仓库已建并 clone),Rust 实现 KVSpace:Get/Set/Del/DelTree/List/Watch/Mkindex/ExtIndex/DelExtIndex/Clear/DisConn+ XValue 类型系统,与 kvspace-go 权威定义逐字节语义一致。xvalue.go的 TLV 编码([kind_len][kind][ref][arr_flag][ndim][dims][raw_len][raw])与全部 kind(int/uint/float/bool/char 家族/dict/index/extindex/rwir/rwfunc/time/duration/scope/ptr)翻译。redis/kvspace.go)。kvspace.h,Go(cgo)/Py(cffi/pyo3)/C++(#include)/Rust(bindgen) 都经它调用,调用方不拖 Go runtime。预期结果
staticlib+cdylib),cbindgen 出kvspace.h。实现方式(铁律)
严格翻译 kvspace-go 每一个文件、每一行代码,像素级对齐(同
.claude/runtime-rust.md):文件名、函数名、常量名一一对应;禁止凭想象写,先读 Go 对应文件再翻译。
依赖 / 关联
kvspace.h(另两份kvlayout.h/kvlang.h)。tlvcodec(已有 Rust+PyO3 跨语言管线),但 XValue 的 kind-TLV 按 kvspace-go 权威规范独立翻译,不复用其通用 TLV 格式。