Rust로 Bun 다시 작성하기
요약
Bun 개발자가 Bun을 Zig에서 Rust로 재작성하는 과정에서 코딩 에이전트를 활용한 혁신적인 방법론을 소개합니다. LLM 기반의 에이전트 엔지니어링을 통해 대규모 코드베이스의 포팅과 테스트 자동화를 성공적으로 수행했습니다.
핵심 포인트
- Zig에서 Rust로 전환하여 메모리 안전성 문제(use-after-free 등) 해결
- 코딩 에이전트를 활용해 100만 줄 이상의 대규모 코드 재작성 자동화
- TypeScript 기반 테스트 스위트를 활용한 일치성 테스트 수행
- 에이전트 엔지니어링을 통한 대규모 PR 리뷰 및 코드 병합 신뢰 확보
2026년 7월 8일 - Link Blog
Rust로 Bun 다시 작성하기 (via) Jarred Sumner는 Bun을 Zig에서 Rust로 다시 작성하는 것에 관한 이 블로그 포스트를 (5월 9일부터) 재작성을 완료하는 데 걸린 시간보다 훨씬 더 오랫동안 약속해 왔습니다.
솔직히 말해서, 기다릴 가치가 있었습니다. 이것은 동적 워크플로우(dynamic workflows), 시험 실행(trial runs), 적대적 검토(adversarial review) 및 기타 모든 종류의 흥미로운 트릭을 특징으로 하는 매우 정교한 에이전트 엔지니어링(agentic engineering)에 대한 상세한 설명입니다.
Jarred는 포스트의 전반부에서 Bun을 이만큼 끌어올린 Zig를 찬양하는 데 시간을 보냅니다. 그런 다음 이 글의 핵심 아이디어에 도달합니다 (강조는 본인):
우리의 버그 수정 목록은 좋지 않은 기분을 느끼게 했고, 저는 Bun의 크래시(crash)를 걱정하며 잠드는 것에 지쳤습니다. 저는 그 점에 대해 Zig를 탓하지 않습니다. Zig의 다른 사용자들은 우리가 겪었던 버그를 겪지 않으며, 가비지 컬렉션 (GC)과 수동 관리 메모리 (manually-managed memory)를 혼합하는 것은 소프트웨어가 필요로 할 만큼 흔한 일이 아니기에 어떤 언어도 이를 위해 설계되지 않았습니다. Zig가 없었다면 우리는 이만큼 오지 못했을 것이며, 저는 항상 감사할 것입니다.
아주 최근까지, Bun과 같은 프로젝트에 있어 프로그래밍 언어 선택은 일방향적인 결정이었습니다.
모든 사람은 대규모 소프트웨어를 처음부터 완전히 다시 작성하기 위해 세상을 멈춰서는 안 된다는 것을 알고 있습니다. Joel Spolsky는 2000년 4월 'Things You Should Never Do, Part I'에서 그 점을 강조했습니다!
오늘날의 프런티어 모델 (frontier models)로 구동되는 코딩 에이전트 (coding agents)가 그 방정식을 바꿉니다.
왜 Rust를 선택했을까요? 모든 것은 메모리 관리 (memory management)와 관련된 문제들로 귀결되었습니다:
해당 목록에 있는 버그의 상당 부분은 use-after-free, double-free, 그리고 에러 경로에서의 "free를 잊어버림"입니다. 안전한 Rust (safe Rust)에서 이것들은 컴파일러 에러이며, Drop을 통한 RAII 방식의 자동 정리와 같습니다.
재작성의 결정적인 촉진 요인은 Bun 테스트 스위트가 TypeScript로 작성되었다는 점이었으며, 이는 그것이 일치성 테스트 스위트 (conformance suite) 역할을 할 수 있음을 의미했습니다. 이를 통해 에이전트 하네스 (agent harness)가 Bun에서 Rust로의 초기 포팅 (port)의 많은 부분을 자동화할 수 있었으며, 이는 처음에 우리가 현재 Mythos/Fable로서 사용할 수 있는 모델의 이전 버전을 테스트하기 위한 실험으로 시작되었습니다.
처음에는 이것이 작동할 것이라고 기대하지 않았습니다. 며칠이 지나자 테스트 스위트 (test suite)의 높은 비율이 통과되기 시작했고, 새로운 Rust 코드가 기존의 Zig 코드베이스 (codebase)와 얼마나 일치하는지 확인했습니다. 제 의견은 "시도해 볼 가치가 있다"에서 "이것을 병합 (merge)하겠다"로 바뀌었습니다. [...]
그 11일 동안(그리고 그 이후에도) 대부분의 시간 동안 저는 워크플로 (workflows)를 모니터링했습니다. 이슈와 버그를 확인하기 위해 출력값을 수동으로 읽고, 문제를 해결하기 위해 Claude에게 루프 (loop)를 수정하도록 프롬프트 (prompting)를 입력했습니다.
100만 줄 이상의 코드가 추가된 PR (Pull Request)을 어떻게 리뷰할까요? LLM이 작성한 대량의 코드를 책임감 있게 병합하는 데 필요한 신뢰를 어떻게 쌓기 시작할까요?
백만 개의 어설션 (assertions)을 포함한 언어 독립적인 테스트 스위트 (test suite), 적대적 코드 리뷰 (adversarial code review), 그리고 무언가 잘못되었을 때 코드를 수동으로 고치는 대신 코드를 생성하는 프로세스를 수정하는 방식입니다.
Bun의 새로운 구현체는 이제 거의 한 달 동안 Claude Code에서 라이브 상태로 운영되고 있습니다:
Claude Code v2.1.181 (6월 17일 출시) 및 그 이후 버전은 Bun의 Rust 포트 (port)를 사용합니다. Linux에서 시작 속도가 10% 빨라졌지만, 그 외에는 거의 아무도 눈치채지 못했습니다. 지루한 것이 좋은 것입니다.
Anthropic에서 일하는 장점 중 하나는 토큰 (tokens) 비용을 지불할 필요가 없다는 것입니다. 예상 비용이 $165,000일 때는 매우 유용하죠!
병합 전, 이 작업에는 캐시되지 않은 입력 토큰 (uncached input tokens) 59억 개, 출력 토큰 (output tokens) 6억 9천만 개, 그리고 캐시된 입력 토큰 읽기 (cached input token reads) 720억 개가 소요되었습니다. API 가격 기준으로 약 $165,000에 달합니다.
이 모든 과정은 조정된 병렬 에이전트 (parallel agents)의 도움을 받아 매우 야심 찬 프로젝트를 수행하는 것에 대한 매혹적인 사례 연구입니다.
최근 기사
- 새로운 GPT-5.6 제품군: Luna, Terra, Sol - 2026년 7월 9일
- sqlite-utils 4.0, 이제 데이터베이스 스키마 마이그레이션 (database schema migrations) 지원 - 2026년 7월 7일
- sqlite-utils 4.0rc2, 대부분 Claude Fable이 작성 (약 $149.25 소요) - 2026년 7월 5일
AI 자동 생성 콘텐츠
본 콘텐츠는 RSS: Simon Willison's Weblog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기