Skip to content

1-kvspace/可嵌入 Rust kvspace-durable(redis/fs/s3),严格翻译 kvspace-go #13

Description

@miaobyte

背景

跨语言 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:

  1. 接口对齐Get/Set/Del/DelTree/List/Watch/Mkindex/ExtIndex/DelExtIndex/Clear/DisConn + XValue 类型系统,与 kvspace-go 权威定义逐字节语义一致。
  2. 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)翻译。
  3. 后端:redis / fs / s3 三后端走同一 KVSpace trait,换后端零改动。redis 先做(对齐 redis/kvspace.go)。
  4. 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 之上。

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