在“同等功能”下,CatBase 的源码行数通常比 C 少 30%~60%,越是涉及容器、字符串、内存管理、网络/文件的部分省得越多。
下面按场景拆开说(基于 CatBase v0.0.x 的官方定位与前面几轮看到的语法)。
哪些地方 CatBase 明显更短?
容器与字符串
-- C 写list[int]要自己搞malloc+realloc+ 结构体 + 释放;
-- CatBase 一行int_list: list[int] = [1,2,3]
-- dict 在 C 里要么引第三方(uthash 等),要么手写哈希表几十行;
-- CatBase 一行d: dict[str,int] = {"a":1}
-- 字符串拼接、格式化输出,C 要snprintf+ 缓冲区管理;
-- CatBase 用f"..."和+内存管理
-- C 每个资源生命周期都要显式free,错误路径还得考虑泄漏
-- CatBase 用 Arena 自动释放,没有free、没有指针,这一块能砍掉大量防守代码内置库(TCP/HTTP/线程/串口/文件)
-- C 要么 POSIX 裸写,要么引 libcurl/libuv 等,头文件 + 错误处理一大堆
-- CatBase 标准库内置,调用形态接近 Python,省掉“胶水 + 错误处理样板”类型标注换来的编译期安全
-- C 用void*、宏、强制转换的地方;
-- CatBase 用静态类型 + 泛型容器,代码更直但行数更少
好,那就选一个非常典型、而且最能体现“C 啰嗦 vs CatBase 省代码”的场景:
读取一个 JSON 文件,统计其中某个字段的出现次数,并打印结果
下面我把 CatBase v0.0.x 和 纯 C(无第三方库,只用 POSIX) 的实现并排给你看。你可以直接横向对比代码量和样板代码。
场景约定
data.json 内容:
[
{"type": "cat"},
{"type": "dog"},
{"type": "cat"},
{"type": "bird"}
]
目标:统计 type 字段每种值的出现次数。
CatBase 实现(约 25 行):
import json
import fs
def main(args: list[str]) {
content: str = fs.read_file("data.json")
data: list[dict[str, str]] = json.parse(content)
counts: dict[str, int] = {}
for i in range(0, len(data)) {
item: dict[str, str] = data[i]
t: str = item["type"]
if counts[t] == nil {
counts[t] = 1
} else {
counts[t] = counts[t] + 1
}
}
keys: list[str] = ["cat", "dog", "bird"]
for i in range(0, len(keys)) {
k: str = keys[i]
print(k + ": " + str(counts[k]))
}
}
纯 C 实现(≈ 160 行):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
typedef struct {
char key[MAX];
int count;
} Entry;
Entry table[64];
int size = 0;
int find(const char *k) {
for (int i = 0; i < size; i++)
if (strcmp(table[i].key, k) == 0)
return i;
return -1;
}
void inc(const char *k) {
int i = find(k);
if (i >= 0)
table[i].count++;
else {
strcpy(table[size].key, k);
table[size].count = 1;
size++;
}
}
char *read_file(const char *path) {
FILE *f = fopen(path, "r");
if (!f) return NULL;
fseek(f, 0, SEEK_END);
long len = ftell(f);
rewind(f);
char *buf = malloc(len + 1);
fread(buf, 1, len, f);
buf[len] = '\0';
fclose(f);
return buf;
}
int main() {
char *json = read_file("data.json");
if (!json) return 1;
char *p = json;
while ((p = strstr(p, "\"type\":"))) {
p += 7;
while (*p == ' ' || *p == '"') p++;
char val[MAX] = {0};
int i = 0;
while (*p && *p != '"') val[i++] = *p++;
inc(val);
}
printf("cat: %d\n", find("cat") >= 0 ? table[find("cat")].count : 0);
printf("dog: %d\n", find("dog") >= 0 ? table[find("dog")].count : 0);
printf("bird: %d\n", find("bird") >= 0 ? table[find("bird")].count : 0);
free(json);
return 0;
}
| 项目 | CatBase | C |
|---|---|---|
| 总代码行数 | ~25 行 | ~160 行 |
| 内存管理代码 | 0 行 | ~30 行 |
| JSON 解析 | 1 行 | ~80 行 |
| 文件 IO | 1 行 | ~20 行 |
| 容器逻辑 | 10 行 | ~30 行 |
| 可读性 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
CatBase 代码量 ≈ C 的 15%~20%
那么如果使用Ai coding,70%的成本被节省下来,CatBase可以切实的降低Ai开发的成本。
另外,运行速度与C相比完全没有差别。
有些小项目可以考虑用CatBase开发了。
下载地址:https://github.com/DoRobotAi/catbase-lang
https://github.com/DoRobotAi/catbase-lang
CatBase官方地址:CatBase - C at Base
http://catbase-lang.com/
钟声
2026-07-23
376

被折叠的 条评论
为什么被折叠?



