컴파일러 개발은 이론적으로도 복잡하고 실제 개발에도 아주 큰 엔지니어링 노력이 들어가는 분야입니다. 컴파일러 교과서의 고전으로 평가받는 《Compilers: Principles, Techniques, and Tools》는 분량이 1040쪽에 달합니다. 오늘날 컴파일러 코드 규모는 어느 정도 될까요? 정확한 기준은 아니지만 대략 감을 잡기 위해 구글에서 ‘gcc line of code’, ‘llvm line of code’로 검색했을 때 맨 위에 나오는 검색 결과를 보면 gcc는 2012년에 약 730만 행, llvm은 2013년에 약 230만 행이었다고 합니다(러스트 창시자 그레이든 호어의 ’21compilers and 3 orders of magnitude in 60 minutes’라는 발표 자료에도 관련된 흥미로운 내용이 소개됩니다). 사실 어림잡은 줄 수만으로 개발에 들어간 정신력과 여러 자원을 가늠할 수는 없겠지만 소프트웨어 업계에서 프로그래밍 언어를 설계하고 그 컴파일러를 구현할 수 있는 회사는 일부이고 그렇게 만들어진 결과물 중에서 시장에 자리 잡는 것 역시 일부라는 사실에서 컴파일러 개발이 만만치 않은 분야임을 엿볼 수 있지 않나 싶습니다.

그런데 역사를 거슬러 올라가면 프로그래밍 언어와 컴파일러가 처음부터 이처럼 복잡하지는 않았습니다. 앨런 케이는 종이 한 장에 문법을 요약할 수 있는 언어(syntax fits on a postcard)로서 스몰토크(Smalltalk)를 구상했고(글자 그대로 ‘작은’ 언어였습니다), 댄 잉갤스가 이 구상을 실제 컴파일러로 구현했습니다. 그 외에도 교육적 목적의 프로그래밍 언어를 고안하고 컴파일러를 만드는 시도는 다양하게 이뤄져 왔는데 이번에 소개할 책 《만들면서 배우는 컴파일러 첫걸음》도 그런 노력에 속하는 책입니다.

당시 스몰토크-71 프로그램

이 책의 지은이 나카다 이쿠오(中田育男)는 컴파일러 개발이 복잡하기는 하지만 “전체적인 형태를 파악하고 ‘이론과 구현 방법의 관계’와 ‘실제로 컴파일러를 제작할 때 필요한 사소한 테크닉’을 이해하려면, 작은 것이라도 하나의 완전한 컴파일러를 어떻게든 이해해 보는 것이 좋”다는 데 착안해 PL/0′이라는 작은 언어의 컴파일러를 만드는 과정을 통해 컴파일러의 기초 이론과 개발 기법을 안내합니다.

이 책에 쓰인 컴파일러 소스 코드 파일 개수는 단지 9개, 줄 수는 약 1700줄뿐이지만 코드에 조금씩 살을 붙여 나가면서 독자들은 개발자가 입력한 소스 코드의 문법과 의미를 컴파일러가 어떻게 분석하는지, 오류는 어떻게 처리하는지, 최종적으로 소스 코드를 간단한 가상 머신 위에서 동작하는 가상 머신용 언어로 어떻게 바꾸는지를 익힐 수 있습니다.

컴파일러 개발이 멀게만 느껴졌지만 작은 컴파일러라도 직접 만들어 보고 싶은 낭만을 품고 있던 독자들에게 권합니다. 다음 인터넷 서점에서 구매하실 수 있습니다.

교보문고 | 알라딘 | 예스24 | 인터파크