设计一个方便 c 解析的,db 语言:
put path value创建或修改 record 数据。add path value给 list 增加数据。
先不设计删除数据的功能,如果需要可以考虑:
del path删除 record 数据。
li
put name "Alice"
put user/age 30
add tags "a"
add tags "b"
put matrix/0/0 1
put matrix/0/1 2json
{
"name": "Alice",
"user": {"age": 30},
"tags": ["a", "b"],
"matrix": [[1,2]]
}需要空 record 和 list 时,可以用 {} 和 []:
li
put name "example"
put stats/count 42
put stats/empty_obj {}
put logs []
put matrix/0/0 1
put matrix/0/1 2
put matrix/1 []json
{
"name": "example",
"stats": {"count": 42, "empty_obj": {}},
"logs": [],
"matrix": [[1,2], []]
}stack vm
通过扩展出来一个 fn 操作,可以取代传统汇编语言。 每次定义一个 instruction 都要带上所属于的函数。
以某个 stack vm 为例:
scheme
(define (factorial n)
(if (int-less-or-equal? n 1)
1
(imul (factorial (isub n 1)) n)))li
fn factorial local-store n
fn factorial label body
fn factorial local-load n
fn factorial literal 1
fn factorial call int-less-or-equal?
fn factorial jump-if-not recur-case
fn factorial jump base-case
fn factorial label base-case
fn factorial literal 1
fn factorial return
fn factorial label recur-case
fn factorial local-load n
fn factorial literal 1
fn factorial call isub
fn factorial local-store n1
fn factorial local-load n1
fn factorial call factorial
fn factorial local-store f1
fn factorial local-load n
fn factorial local-load f1
fn factorial tail-call imul可以利用数据库机制来增加 metadata:
li
put factorial/arity 1about file system
一般的 file system 一个路径下如果是文件,就不能再是文件夹了。
li 这样设计的 db 等价于每个文件在保存数据的同时, 都可以被视为一个文件夹。
这样为文件保存 metadata 就很方便了。
pure data
[2026-04-20]
不应该有 variable 和表达式,应该用纯数据:
li
fn factorial :local-store :n
fn factorial :label :body
fn factorial :local-load :n
fn factorial :literal 1
fn factorial :call :int-less-or-equal?
fn factorial :jump-if-not :recur-case
fn factorial :jump :base-case
fn factorial :label :base-case
fn factorial :literal 1
fn factorial :return
fn factorial :label :recur-case
fn factorial :local-load :n
fn factorial :literal 1
fn factorial :call :isub
fn factorial :local-store :n1
fn factorial :local-load :n1
fn factorial :call :factorial
fn factorial :local-store :f1
fn factorial :local-load :n
fn factorial :local-load :f1
fn factorial :tail-call :imul