大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!
关注、发送C1即可获取JetBrains全家桶激活工具和码!
前阵子,Anthropic 放了个大招:发布了一篇工程博客,宣称用 Claude 从零写出了一个 C 编译器,名叫 CCC(Claude’s C Compiler),并且“能编译 Linux 内核”。更刺激的是:代码 100% 由 Claude Opus 4.6 产出,人类只负责写测试用例和引导流程。
Building a C compiler with a team of parallel Claudes
这事儿听起来真是“赛博爽文”(也让小D惊出一身冷汗,要被替代了[惊恐]):AI 不仅会写业务代码,还能写编译器这种“硬核到发光”的东西?于是有人不信邪,直接拉出来和工业老大哥 GCC 正面 PK——不看营销,看数据。
CCC 源码在这里对比与基准测试仓库
先絮叨一个小知识:编译一个 C 程序到底发生了啥?
很多人一听“编译器”就以为只有一个工具在干活,其实典型链路是四段式:
#include、#define 等,把源码展开成“更长的源码”。
顺带一提:编译器这玩意儿为啥难?因为 GCC 从 1987 年开始迭代,接近 40 年、无数贡献者、无数坑位修复,优化策略堆得像“学术论文博物馆”。所以 CCC 能跑起来已经挺离谱,但想直接追平 GCC 的产出质量……那属于让新手上来打职业联赛,还要求“先拿个世界冠军”。
所以“能编内核”这句话里,最可能出问题的其实不是“能不能解析 C”,而是能不能在链接阶段把 ELF、重定位和符号表整明白。
因为 Linux 内核太变态了:GCC 扩展、内联汇编、奇奇怪怪的链接脚本、各种极限写法,属于编译器的“综合地狱副本”。 SQLite 则很适合当“现实但可控”的试金石:它有单文件 amalgamation(一个巨大的 .c),偏标准 C、测试成熟、闭环强。能把 SQLite 编对、跑对,说明基础能力很实在;跑不动 SQLite,就别碰内核这种深渊。
测试者准备了两台 Debian 系 VM(同规格、同硬件条件),关键配置大概是:
/usr/bin/time -v + 自定义采样 CPU/RSS还有个很“务实”的补丁:CCC 对 16-bit real-mode 启动代码(-m16)搞不定,所以开启 gcc_m16 特性,把这段交给 GCC 处理;另外 .S 汇编文件也交给 GCC,CCC 专注编 .c。
这部分属于“震撼但不意外”:
vmlinux 无法产出。问题模式集中在两类:
__jump_table 相关重定位不对(内核 jump labels / static keys 等机制很依赖它)__ksymtab 相关符号表条目异常(模块导出符号那一套)换句话说:编译器前端/中端没翻车,翻在“链接器与重定位/符号生成”这种细节地狱。这也刚好印证了“链接器是最难的那一段”。


编译时间方面,公平比较只能看 -O0(因为 CCC 的 -O 基本是装饰品,后面会说):
-O0:约 64.6s-O0 约 272MB)二进制体积更夸张:
真正让人“笑不出来”的是运行性能:
-O0)大概 10.3s-O2)大概 6.1s没错,秒表变成了时钟,时钟变成了人生。😵💫


更有意思的是:CCC 的慢不是均匀慢。简单操作可能只慢 1~7 倍,但遇到 JOIN / 子查询这种“嵌套循环”结构,能慢到五位数、六位数倍。比如 NOT IN (subquery) 这种模式,某些查询直接慢出天际。
SQLite 的执行引擎里有个超级大函数(局部变量多、switch 巨大),GCC 即便 -O0 也能相对克制地用寄存器/栈配合;CCC 则更像“只有一个小推车(某个寄存器)”,不停把数据从栈搬到寄存器,再从寄存器搬回栈,循环往复。
GCC 的风格:
movl -8(%rbp), %eax ; load loop counter
cmpl -36(%rbp), %eax ; compare against n
jl .L6 ; branch
movl(%rax), %edx ; load a[i] directly
cmpl %eax, %edx ; compare in registers
CCC 的风格:
movq -0x1580(%rbp), %rax ; load from deep stack offset
movq %rax, -0x2ae8(%rbp) ; store to another deep stack offset
movq -0x1588(%rbp), %rax ; load next value
movq %rax, -0x2af0(%rbp) ; store to next offset
; ... dozens more memory-to-memory copies
这种“内存 ↔ 寄存器 ↔ 内存”的搬运工模式,一旦进入 SQLite 那种高频循环,性能就会指数级爆炸。
-O2 基本不生效非常直观的对比:-O0 和 -O2 生成的汇编/二进制基本没有差异。 这意味着 CCC 没有像 GCC 那样的多层级优化:指令选择、寄存器分配、循环优化、内联、DCE、向量化……这些“GCC 几十年家底”带来的东西,CCC 还没跟上。
这会导致 GDB 回溯像“迷雾森林”,定位问题很痛苦;同时也让 profiling 这类工作基本没法正常做。
发布没多久就有人提了一个非常经典的 issue:README 的 hello world 在新环境直接失败,报系统头文件找不到(例如 stddef.h / stdarg.h)。 根因是 CCC 的预处理器没有正确搜到系统 include 路径——这些头往往来自编译器/工具链配置,而不是单纯 libc。
$ ./target/release/ccc -o hello hello.c
/usr/include/stdio.h:34:10: error: stddef.h: No such file or directory
/usr/include/stdio.h:37:10: error: stdarg.h: No such file or directory
ccc: error: 2preprocessor error(s) in hello.c
这事儿也说明:“能跑大工程”不代表“新手体验就丝滑”。工具链细节是生产级软件最容易被忽略、却最影响推广的部分。
从工程成就角度看,CCC 确实很惊艳:
但从“拿来干活”的角度看,它目前还差几个关键台阶:
代码世界里,真正的差距往往不在“能不能跑起来”,而在“能不能在极限场景稳定、可调试、可优化、可维护”。
就像平常我们写业务代码不能只对着正常场景来测试,因为你永远不知道用户或者攻击者会发出怎样不可思议的请求!!!
GCC/Clang 的优势,就是把这些“脏活累活”做了几十年。
话说回来,CCC 的出现至少证明了一件事:AI 写代码的上限,已经开始摸到“系统级基础设施”的边了。只是距离“工程师可以安心躺平”——还早得很。别急,先把 CI 过了再说🤣
喜欢就奖励一个“👍”和“在看”呗~

如果你只是激活JetBrains全家桶IDE,那这个应该是目前最经济、最实惠的方法了!
专属付费版全家桶除了支持IDE的正常激活外,还支持常用的付费插件和付费主题!

100%保障激活,100%稳定使用,100%售后兜底!
因为专属付费版全家桶支持常用付费插件和付费主题。而任意一款或两款付费插件或付费主题,其激活费用就远高于我提供的专属付费版全家桶。
比如,最方便的彩虹括号符Rainbow Brackets,124/年。

再如,MyBatis最佳辅助框架MyBatisCodeHelperPro的官方版本MyBatisCodeHelperPro (Marketplace Edition),157/年。

还有最牛的Fast Request,集API调试工具 + API管理工具 + API搜索工具一体!157/年。

`专属付费版全家桶`包含上述这些付费插件,但不限于上述这些付费插件!
需要的小伙伴,可以扫码二维码,回复付费,了解优惠详情~
