- Anthropic의 Claude Opus 4.6이 전적으로 작성한 CCC(Claude’s C Compiler) 는 리눅스 커널을 컴파일할 수 있다고 주장하며 공개됨
-
Rust로 작성된 독립형 컴파일러로, 프런트엔드부터 링커까지 모든 구성요소를 직접 구현했으나, GCC 대비 성능과 최적화 품질은 크게 떨어짐
-
SQLite와 Linux 커널을 대상으로 한 벤치마크에서 CCC는 모든 C 파일을 오류 없이 컴파일했지만, 링커 단계에서 4만여 개의 참조 오류로 빌드 실패
- SQLite 실행 성능은 최대 158,000배 느리고, 바이너리 크기는 3배 이상 크며, 최적화 옵션(-O2 등)은 무효
- AI가 완전한 C 컴파일러를 생성했다는 점은 기술적으로 의미 있으나, 실제 사용 가능한 수준의 효율성과 호환성은 아직 미달
CCC 개요와 구조
- CCC는 Anthropic이 Claude를 이용해 전적으로 AI가 작성한 C 컴파일러로, x86-64, i686, AArch64, RISC-V 64를 지원
-
Rust로 작성, SSA 기반 IR, 옵티마이저, 코드 생성기, 어셈블러, 링커, DWARF 디버그 정보 생성까지 포함
-
컴파일러·어셈블러·링커의 역할을 구분해 설명하며, 링커가 가장 복잡하고 오류 발생 가능성이 높다고 서술
- 리눅스 커널은 GCC 확장과 복잡한 링커 스크립트를 사용하므로 초기 테스트 대상으로 부적합, 대신 SQLite를 주요 벤치마크로 선택
테스트 환경과 방법
- 두 개의 Debian 기반 VM(6 vCPU, 16GB RAM) 에서 동일한 조건으로 GCC 14.2.0과 CCC를 비교
-
비교 항목: 컴파일 시간, 바이너리 크기, 실행 속도, 메모리 사용량, 안정성
- CCC는 gcc_m16 기능으로 16비트 부트 코드만 GCC에 위임, 나머지는 CCC로 처리
- SQLite 벤치마크는 CPU 중심으로 설계되어, 42개의 SQL 연산을 10단계로 수행
주요 결과 요약
-
리눅스 커널 6.9: CCC는 2,844개 C 파일을 모두 컴파일했으나, 링커 단계에서 40,784개의 undefined reference 오류로 실패
- 오류 원인: __jump_table, __ksymtab 섹션의 잘못된 relocation 및 심볼 생성
-
SQLite 컴파일: CCC는 GCC보다 1.3배 느리고, 바이너리 크기 2.7~3배, 메모리 사용량 5.9배
-
SQLite 실행 성능: GCC -O0 대비 737배, -O2 대비 1,242배 느림
- 단순 쿼리는 1~7배, 중첩 루프 쿼리는 최대 158,000배 느림
-
Crash 테스트 5종 모두 통과, 기능적 정확성은 확보
성능 저하의 원인
-
레지스터 스필링 과다: 대부분의 지역 변수를 스택에 저장해 메모리 접근이 과도하게 발생
-
sqlite3VdbeExec 함수에서 100개 이상의 변수를 스택으로 처리, 코드 길이 3배 증가
-
최적화 옵션 무효: -O0와 -O2 결과가 완전히 동일, 15개 SSA 패스가 모든 레벨에서 동일하게 실행
-
프레임 포인터 손상으로 GDB 디버깅 불가
-
코드 크기 팽창: SQLite 바이너리 4.27MB로 GCC 대비 2.78배, 명령 캐시 미스 증가
-
심볼 테이블 미생성: 내부 함수 심볼이 없어 프로파일링 불가
CCC의 강점과 한계
-
강점
- 리눅스 커널의 모든 C 파일을 오류 없이 컴파일
- SQLite 결과의 정확성·안정성 확보, 세그폴트 없음
-
GCC 호환 명령행 인터페이스 지원
-
한계
-
실행 속도 극단적 저하(최대 158,000배)
-
링커 비호환성으로 커널 빌드 실패
-
바이너리 크기 및 메모리 사용량 과다
-
최적화·디버그 정보 부재, -O 옵션 무효
-
컴파일 속도도 GCC보다 25% 느림
“Hello World” 문제
- 공개 직후 “Hello world does not compile” 이슈 발생
-
stddef.h, stdarg.h를 찾지 못해 전처리 단계에서 실패
- GitHub에서 288개 이상의 반응과 200여 개 댓글이 달리며 화제
- 일부 사용자는 “학부생 수준의 컴파일러 과제 같다”고 평가
결론
- CCC는 AI가 완전한 C 컴파일러를 생성할 수 있음을 입증한 사례
- 리눅스 커널의 모든 C 파일을 오류 없이 처리하고, SQLite를 기능적으로 정확히 실행
- 그러나 실제 사용에는 부적합
- 실행 성능이 극도로 낮고, 링커·최적화·디버깅 기능이 미완성
-
연구적 성취로서는 의미 있으나, 실무용 컴파일러로는 GCC·Clang 등 기존 도구가 여전히 필수