본문 바로가기

iOS

LLVM (Low-Level-Virtual-Machine)

LLVM(Low Level Virtual Machine)

최근 LLVM 이라는 키워드에 대하여 관심을 갖게되었던 계기가 있었습니다. 

 

오늘은 평소에 들어는 봤으나 몰랐던 LLVM에 대하여 간단하게 이게 무엇이며 어떠한 역할을 하는지 살펴보도록 하겠습니다.

 

LLVM 은 오픈소스 컴파일러 개발용 종합 패키지라고 합니다. 이름에는 Virtual Machine이 들어가 있으나 실제로는 가상 머신과는 거의 관련이 없이 그냥 프로젝트 이름이라고 합니다.

 

GCC 등의 기존 컴파일러들의 경우, 컴파일 과정 내부에서 코드의 파싱, 파스 트리, 기계어 변환, 코드 최적화 등 명확한 구분 없이 모놀리하게 설계되어있습니다.

 

이 말은 곧, 유지보수가 쉽지 않다는 의미입니다. 이러한 고질적 문제들을 해결하기 위해 LLVM 이 탄생하였습니다.

 

LLVM 은 C++로 작성되어 유지보수가 보다 편리하며 컴파일 과정들을 각각 독립적인 모듈로 제공됩니다.

 

이전에는 컴파일러를 제작하려면 각각의 플랫폼에 맞는 기계어로 치환할 수 있도록 일일이 손을 봤어야 했으나, LLVM 은 기계어 생성 혹은 코드 최적화 등과 같은 작업들을 알아서 처리해줍니다.

 

이러한 이유로 비교적 최근에 개발된 컴파일러들은 다수가 LLVM으로 제작되었습니다. (그리고 우리의 Swift 또한 LLVM이 지탱하고 있습니다)

 

Swift 의 컴파일러는 LLVM 을 통해서 바이너리 코드를 생성하는데, 바이너리 코드를 생성하는 과정에서 LLVM을 위한 중간 표현 단계인 LLVM IR을 생성하게 되고, SIL(Swift Intermediate Language)이 그 중간에 위치하게 됩니다.