LLVM에 대해 설명하기 전에 일반적인 컴파일러에 대한 이야기부터 시작하겠습니다. "그런 건 이미 알아"라고 하실 분들은 본장을 건너뛰어도 상관없습니다.
컴파일러는 일반적으로 프리 프로세서, 자구 해석, 구문 해석, 의미 해석, 최적화, 코드 생성 따위의 복수 요소로 구성되어 있습니다. 의미 해석까지를 '프론트엔드'라고 부르며 소스코드를 해석하여 중간표현이나 심볼 테이블의 작성, 관리를 합니다. 그리고 '미들엔드'인 최적화부는 프론트엔드에서 받은 중간표현을 다양한 해석이나 최적화를 더하여 프로그램의 고속화를 꾀합니다. 마지막으로 코드 생성부가 최적화가 끝난 후의 중간 표현을 목적 코드(일반적으로 어셈블리)로 변환합니다. 이 코드 생성부를 '백엔드'라 부릅니다. "어라? 기계어가 아니야? 실행 파일은 ?"라고 생각하는 분들이 있는 것도 당연하다 생각합니다. 아마 일반적으로 '컴파일러'라고 말할 때 가르키는 것은 기계어 '실행파일'을 출력하는 것을 말합니다. 컴파일러가 아니면 그것은 뭐일까요? 실은 그건 컴파일러라는 것입니다. 여러분이 평소 사용하는 컴파일러는 정확하게는 '컴파일러 드라이버'였습니다.
그럼 다음 의문입니다. '"컴파일러 드라이버란 건 뭐지?" 그 답은 간단합니다. 그것은 컴파일러, 어셈블러, 링커따위의 프로그램을 제어하는 프로그램입니다. 컴파일러 드라이버는 상황에 응해 컴파일러, 어셈블러, 링커같은 것들을 호출합니다. 실행 파일의 작성에는 컴파일러가 생성한 코드를 어셈블리에서 기계어로 변환한 후에 링커를 사용하여 라이브러리같은 외부 파일을 링크하는 과정이 필요합니다만 컴파일러 드라이버는 이런 일련의 작업을 관리, 실행해 주는 엄청난 녀석입니다. 여러분이 잘 아는 GCC도 실은 컴파일러 드라이버입니다*1
LLVM 프로젝트낚인 거임. 하여튼 낚인 거임
나도 삘왔을때 LLVM책 3권쯤 산듯
그림이 너무 적어~
툴체인이 워낙 커서 그림 많으려면 1권으론 무리다 ㅋㅋ
아니 이걸 샀다고;;