얼마 전, Claude Opus를 활용해 꽤 야심 찬 컴파일러를 만든 적이 있다. 처음부터 Anthropic만큼 거창한 목표를 세웠던 건 아니었다. Anthropic은 여러 CPU 아키텍처를 지원하고 부팅 가능한 Linux 커널까지 컴파일하는 것을 목표로 삼았으니까. 사실 이 작업을 시작하기 전까지는 그 프로젝트의 존재 자체를 잊고 있었다.

얼마 전, Claude Opus를 활용해 꽤 야심 찬 컴파일러를 만든 적이 있다.
처음부터 Anthropic만큼 거창한 목표를 세웠던 건 아니었다. Anthropic은 여러 CPU 아키텍처를 지원하고 부팅 가능한 Linux 커널까지 컴파일하는 것을 목표로 삼았으니까.
(사실 이 작업을 시작하기 전까지는 그 프로젝트의 존재 자체를 잊고 있었다. 아래 스크린샷을 SNS에 올렸더니 누군가 상기시켜 줘서 기억이 났다.)
어젯밤, 잠자리에 들기 직전에 우리가 새롭게 만들고 있는 에이전트 하네스(agentic harness) Evener에서 /loop 지원과 tool use를 테스트해볼 프로젝트가 필요했다. 폰으로 모바일 UI를 열고 이렇게 입력했다. "Your job is to implement a standards-compliant ARM64 C compiler for macOS in Swift."

Evener가 몇 가지 질문을 던졌다.
의도를 좀 더 명확히 해줬다. "급진적인 작업 분해 방식도 환영해. 컨텍스트와 복잡도를 관리하려면 재귀적 서브에이전트를 활용해. 프로젝트 구조는 네가 합리적이라고 생각하는 방식으로 잡으면 돼. 완전히 자율적으로 작업하고, 나한테 질문할 필요 없어."
그리고 목표를 이렇게 제시했다. "현대적인 Swift로 표준을 준수하는 C 컴파일러를 구현해. SQLite를 빌드할 수 있어야 하고, SQLite의 모든 테스트도 통과해야 해. 프로젝트 분해 방식은 네 판단에 맡길게. 서브에이전트, 재귀적 서브에이전트를 포함해서 효율적으로 실행해."
솔직히 어떻게 될지 몰랐다.
일단 작업이 시작되는지 확인할 때까지만 지켜봤다.

새벽 네 시쯤 뒤척이다가 폰을 들여다봤더니, malloc 이슈를 한창 디버깅하는 중이었다.
일곱 시가 조금 안 돼서 일어나보니 이번엔 가변 인자 함수(variadic function)를 구현하고 있었다.

오늘은 하루 대부분을 회의로 보내느라 자세히 들여다볼 틈이 없었다. 가끔 세션을 열어볼 때마다 조금씩 진행되고 있었다. 어셈블러 코드를 출력하더니 clang의 어셈블러 결과와 나란히 놓고 차이를 찾아가기도 했다.
274k짜리 sqlite.c amalgamation을 빌드하려다 segfault가 나는 장면도 봤다.
작은 테스트 스크립트를 작성하는 것도 봤다.
INSERT을 시도하다가 터지는 것도 봤다.
오후 여덟 시 반쯤 숨을 돌리고 폰으로 Evener를 열었는데, 실망스럽게도 /goal 루프가 그냥 멈춰 있었다.
원래 그러면 안 되는데. 하지만 내가 테스트하려던 장애 상황이 딱 그거였다.
로그의 최근 부분을 읽으면서 어떤 뻔한 문제가 실패를 일으켰는지 파악하려 했다.
그런데 이걸 보게 될 줄은 전혀 예상하지 못했다.

멈춘 이유는 SQLite 컴파일에 성공했기 때문이었다. INSERT과 SELECT까지 완료된 상태였다.
내가 요청한 걸 그대로 해낸 것이다.
Evener와 GLM 5.2가 SQLite를 컴파일하고 기본 스모크 테스트(smoke test)를 통과하는 C 컴파일러를 만드는 데 걸린 시간은 약 21시간이었다.
해당 체크포인트는 다음과 같다.
https://github.com/obra/toy-c-compiler/commit/456ddfa8912b5ba47b968773ecddcdca741f0df2
(처음에는 웹 검색으로 편법을 쓴 건 아닐까 걱정했는데, 알고 보니 하네스의 웹 페치 도구를 내가 실수로 망가뜨려 놓은 상태였다. 그 방법으로는 꼼수를 쓸 수가 없었던 셈이다.)
아직 빠진 기능이 많고, 표준을 완전히 준수하는 수준도 아니다. 다만 그 부분까지 목표로 명확히 제시하지 않은 내 탓이기도 하다.
방금 컴플라이언스 스위트(compliance suite)를 돌려서 빠진 기능을 채우도록 /goal을 새로 시작했다. 어떻게 되는지 보려고 하루이틀 더 돌려볼 생각이다.