CatBase 实战篇:用 CatBase 写第一个实用小工具

这门语言到底能不能干正经活?

光会打印 Hello World,说明不了任何问题。今天用一个真能用的工具来回答它。

我们要写的东西叫「配置体检工具」。给它一个 JSON 配置文件,它检查必填字段在不在,缺什么一目了然,最后顺手生成一份报告文件。这类活儿在 CI 流水线里很常见。

为什么用它来练手?想象你的 AI 服务要部署到一台小内存的 Linux 机器上,启动前得确认配置完整。用 Python 写要拖着解释器一起部署,用 C 写要跟指针和字符串折腾半天。CatBase 正好卡在中间。

开始之前,默认你已经按入门篇装好了 CatBase。

第一步,准备一份测试配置

新建 config.json,故意写得完整一点:

{
  "host": "127.0.0.1",
  "port": 8080,
  "debug": true,
  "model": "qwen"
}

第二步,写代码

新建 checkconfig.cat,整个工具一个文件:

def check(data: dict[str, any], key: str) -> bool {
    if key in data {
        return True
    } else {
        return False
    }
}

def main(args: list[str]) {
    if len(args) < 2 {
        print("用法: ./checkconfig config.json\n")
        return
    }

    path: str = args[1]
    f: any = file(path, "r")
    content: str = read(f)
    close(f)

    config: dict[str, any] = json_loads(content)

    required: list[str] = ["host", "port", "debug"]
    ok_count: int = 0

    for key in required {
        if check(config, key) {
            print("OK      ", key, " = ", str(config[key]), "\n")
            ok_count = ok_count + 1
        } else {
            print("MISSING ", key, "\n")
        }
    }

    print(f"体检完成: {ok_count}/{len(required)} 个必填字段就位\n")

    report: any = file("report.txt", "w")
    write(report, f"config: {path}\n")
    write(report, f"passed: {ok_count}/{len(required)}\n")
    close(report)
    print("报告已写入 report.txt\n")
}

第三步,编译运行

./bin/catbasecc checkconfig.cat
./checkconfig config.json

输出长这样:

OK      host = 127.0.0.1
OK      port = 8080
OK      debug = True
体检完成: 3/3 个必填字段就位
报告已写入 report.txt

现在把 config.json 里的 debug 删掉再跑一遍,第三行会变成 MISSING。删完记得跑一次,这个反馈很直观。

编译产物是一个原生二进制文件。把它拷到另一台同架构的 Linux 上,直接执行,不用装 Python,不用配环境。

代码里值得注意的 4 个点

命令行参数的拿法。 args[0] 是程序名本身,用户传的参数从 args[1] 开始。所以这里用 len(args) < 2 判断有没有传文件路径。

JSON 一行搞定。 json_loads(content) 把整段文本变成 dict[str, any],后面用 key in data 判断字段在不在,比在字符串里瞎找靠谱得多。

文件读写三步走。 file(path, "r") 打开,read(f) 读,close(f) 关。写文件同理,模式换成 "w",用 write(f, ...) 写入。

f-string 让拼接变清爽。 f"passed: {ok_count}/{len(required)}\n" 里可以直接嵌表达式,不用到处敲加号。

顺带一提,check 这个函数演示了 CatBase 的函数规范:参数类型和返回值类型都必须写明。读代码的人一眼就能看出它要一个字典和一个字符串,还一个布尔值。

几句实话

生态还在早期,标准库正在长。字符串处理那一类函数(split、upper、replace 这些)在官方手册里还没写全,写复杂文本处理之前,建议先翻一遍 doc/catbase.md 确认函数是否存在。

编译报错会把 Zig 的错误反向映射回 .cat 源码行号,这个体验不错。但底层毕竟是 Zig,遇到看不懂的报错,去官方微信群问是最快的路子。

版本号还停在 0.6,API 随时可能调整。拿来做内部工具和个人项目很合适,上生产环境建议再等等。

适合谁用这篇

想验证 CatBase 实战能力的人,这个工具 40 行,半小时能跑通。需要在极小环境部署小工具的人,编译产物零运行时依赖这一点很香。正在考虑技术选型的团队,可以拿它当一个低成本试验品。

写在最后

从 Hello World 到能用的工具,中间只差一次动手。CatBase 现在的状态像一块刚开垦的地,种子撒下去,长势取决于头一批耕作的人。

你的团队有没有那种「Python 写着爽、部署想骂人」的小工具?评论区聊聊,说不定下一篇就拿它开刀。


参考来源:CatBase 官网 catbase-lang.com、GitHub 仓库 DoRobotAi/catbase-lang README 与 doc/catbase.md

posted @ 2026-10-16 11:14  努力,努力再努力  阅读(41)  评论(0)    收藏  举报