허준회님의 `만화로 나누는 자유/오픈소스 소프트웨어 이야기` 이야기를 즐겨보는데요.
최근에 LLVM 프로젝트 이야기를 올려주셨는데, 이번 에피소드가 특히 재밌어서 공유해요.
LLVM 이야기 뿐만 아니라 기본적인 컴파일러의 구조부터 왜 LLVM을 개발하게 되었는지 기존 컴파일러와는 어떻게 다른지 이해하기 쉽게 설명해주셔서, 컴파일러 멍청이인 저도 재밌게 읽을 수 있었어요.
소스코드를 읽어 AST(abstract syntax tree) 를 생성하는 프론트엔드
코드의 실행시간 개선을 위해 코드를 최적화하고, 변환작업을 수행하는 옵티마이저
대상 (아키텍쳐) 명령어 세트에 맞게 바이너리 코드를 생성하는 백엔드
의 구조를 설명하고,
기존 컴파일러들은 이 모든 과정의 코드가 (잘 분리되어 있지않아) 다른 컴파일러에 코드 공유(재활용)가 되지 않던 아쉬움을
LLVM의 개발자인 크리스래트너가 언어독립적인 intermediate representation계층을 넣어서 프론트엔드가 해석한 코드를 같은 옵티마이저가 공유할 수 있도록 만든 이야기를 그림으로 쉽게 이해할 수 있게 그려주셨어요.
다양한 아키텍쳐에 맞춰 백엔드를 개발해두면, 앞단의 프론트엔드만 새롭게 개발하는 것 만으로 옵티마이저, 백엔드를 그대로 공유할 수 있다는 설명을 보면서, LLVM, LLVM 말만 들었지. 이렇게 대단한 것이었구나. 새롭게 배울 수 있어서 좋았고, 조금 더 공부해 보고 싶다는 생각도 들었어요.
LLVM 을 개발한 크리스래트너가 애플에서 Swift 언어를 혼자 개발했는데, 사내에 알려져 Objective-C를 대체하게 되었다는 이야기도 재밌었어요.