Skip to content

li

· xieyuheng

设计一个方便 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 2
json
{
  "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 1

about 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