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

浙公网安备 33010602011771号