一门纯文本解释型语言:代码与数据同处一棵 KV 树。

程序计数器是一条路径,源码即 IR,每个值都是纯文本——任何 KV 客户端都能查看,崩溃后可从原指令继续。

下载 v0.3.21 快速开始 发布于 2026-10-27
curl -fsSL https://raw.githubusercontent.com/array2d/kvlang/master/install.sh | sh

为什么是 kvlang

小核心,其余能力全部注册在路径上。

代码即数据

一个函数就是一棵子树。参数在负轴是读参、正轴是写参——与 kvspace 里每个值的形状完全一致。


    rwfunc add(a:int64, b:int64) -> (c:int64) { a + b -> c }

PC 是路径,崩溃可续

没有独立的调用栈。帧深直接写在程序计数器里,重启后的进程可以从同一条指令继续执行。


PC    = "/vthread/<vid>/[1]/[3,0]"            vthread vid, frame 1, instruction 3

小核心,扩展在上

核心运行时只负责执行与跳转。其余每个 opcode 都注册在 /lib/<opcode>,交给声明了它的运行时兑现。


/lib/<opcode>/vids/<vtid> = pc

规范即事实

语言事实在规范里,不在这张页面上。86 章规范定义语言,232 个锚定教程用例演示它。 阅读规范 →

字节一致的双后端

一套 PascalCase C ABI,两个实现由 DSN 选择。同一份程序在共享内存、文件或 Redis 上运行,落盘字节完全一致。


KVSPACE=shm:///tmp/kvlang.shm ./bin/kvlang tutorial/01-basics/hello.kv   # kvspace-c
KVSPACE=fs:///tmp/kvlang-fs   ./bin/kvlang tutorial/01-basics/hello.kv   # kvspace-durable

为 Agent 而生

源码、值与编译产物都是同一棵树里的纯文本。deepx 以 kvlang 作为前端语言;byteseek 通过同样的 KV 读写,读取并改写自己的代码与状态。 查看用例 →

生态

三层,一棵树。每一层都可以独立替换。

底层 kvspace、中层 layout、上层 runtime

kvspace

寻址与内存。一套 C ABI;shm 与 durable 后端必须逐字节一致。

layout

o0 编译器。解析源码并写入 KV 树——不做优化,没有 IR。

runtime

纯解释:取指、解码、执行、路由。扩展放在 /lib/<opcode>。

基准测试

每个 case 有四份逻辑等价的实现。kvlang 目前仍比 Python、Rust、C 慢;这些图表用于追踪它收敛的速度。

数据来自 v0.3.21 · commit aa29831 · 测量于 2026-10-27 · Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz · 原始 CSV

基准测试十个基准用例的纳秒级耗时(对数刻度),对比 kvlang(shm、fs、redis)与 Python、Rust、C。kvlang shmkvlang fskvlang redisPythonRustC耗时(ns,对数刻度)binary_search1µs1ms1sN=16N=32N=64binary_treesdepth=4depth=5depth=6fib1µs1ms1sn=8n=9n=10hash_tableN=50N=100N=200iops1µs1ms1sN=500N=1000N=2000k_nucleotiderep=3rep=5rep=8matmul1µs1ms1sN=4N=6N=8nqueensN=4N=5N=6prime_sieve1µs1ms1sN=50N=75N=100quicksortN=32,seed=1N=64,seed=1N=128,seed=1
完整结果(30 行)
CaseInputshmfsredisPythonRustC
binary_searchN=16413 µs——14.2 µs687 ns500 ns
binary_searchN=32814 µs——24.4 µs1.41 µs1.12 µs
binary_searchN=641.74 ms——45.9 µs2.91 µs2.19 µs
binary_treesdepth=4932 µs——14.2 µs2.39 µs5.75 µs
binary_treesdepth=51.84 ms——22.7 µs3.12 µs7.03 µs
binary_treesdepth=63.64 ms——40.3 µs4.46 µs8.74 µs
fibn=8157 µs——10.2 µs346 ns308 ns
fibn=9218 µs——12.0 µs399 ns414 ns
fibn=10322 µs——15.4 µs498 ns574 ns
hash_tableN=50490 µs——33.3 µs5.23 µs284 ns
hash_tableN=100969 µs——60.8 µs7.90 µs434 ns
hash_tableN=2001.94 ms——117 µs15.4 µs764 ns
iopsN=500124 µs——23.6 µs465 ns270 ns
iopsN=1000199 µs——44.7 µs794 ns463 ns
iopsN=2000355 µs——89.0 µs1.46 µs809 ns
k_nucleotiderep=31.76 ms——41.1 µs3.14 µs202 ns
k_nucleotiderep=52.96 ms——65.2 µs4.94 µs261 ns
k_nucleotiderep=84.80 ms——97.6 µs7.45 µs411 ns
matmulN=4275 µs——20.7 µs349 ns233 ns
matmulN=6849 µs——53.2 µs424 ns366 ns
matmulN=81.94 ms——113 µs820 ns557 ns
nqueensN=4167 µs——13.5 µs309 ns271 ns
nqueensN=5296 µs——23.5 µs598 ns527 ns
nqueensN=6643 µs——50.7 µs1.53 µs1.50 µs
prime_sieveN=50735 µs——40.6 µs15.4 µs19.9 µs
prime_sieveN=75939 µs——62.2 µs18.2 µs20.2 µs
prime_sieveN=1001.11 ms——81.6 µs21.8 µs21.3 µs
quicksortN=32,seed=1662 µs——18.7 µs1.11 µs1.01 µs
quicksortN=64,seed=11.48 ms——33.8 µs2.36 µs2.18 µs
quicksortN=128,seed=13.14 ms——65.0 µs5.22 µs4.58 µs

ns/µs/ms 自动选择单位;缺值显示为 —。 benchmark/README.md

开始使用

三步跑起来。

1 · 安装


curl -fsSL https://raw.githubusercontent.com/array2d/kvlang/master/install.sh | sh

2 · 运行


./bin/kvlang -c 'println("hello, world")'    # inline mode (entry init)

3 · 读教程

tutorial/01-basics/hello.kv — 232 个锚定用例中的第一个。

从源码构建

make all                                     # runtime(C) + layout(Rust) + runtime-rs(Rust) + json(Go)

需要 C 工具链 + cmake、Rust(cargo)与 kvspace ABI 库。详见 README_CN。

学习

跑教程、浏览标准库——规范也在里面。

教程

232 个可运行用例,分布在 15 章。

tutorial/ →

标准库

逐篇浏览 .kv 文档及其源码结构。

stdlib 文档 →