Clang/LLVM 소개

Clang/LLVM은 컴파일러 도구 체인을 구성하는 기술 묶음이다.

  • LLVM: 컴파일러를 만들기 위한 공통 기반 인프라
  • Clang: LLVM 위에서 동작하는 C / C++ / Objective-C 컴파일러 프론트엔드

LLVM ?

LLVM은 원래 Low Level Virtual Machine에서 시작했지만, 지금은 의미가 확장되어

컴파일러를 만들기 위한 모듈형 컴파일러 인프라 전체

를 가리킨다.

LLVM의 핵심 아이디어

  • 언어에 독립적인 중간 표현(IR, Intermediate Representation) 사용
  • 프론트엔드 / 옵티마이저 / 백엔드를 분리
  • 다양한 언어와 CPU 아키텍처를 쉽게 지원

LLVM 구조 (개념)

소스 코드
   ↓
[프론트엔드]  ── 언어별
   ↓
 LLVM IR      ─ LLVM의 핵심
   ↓
[옵티마이저]  ─ 공통
   ↓
[백엔드]      ─ 아키텍처별 (x86, ARM, RISC-V …)
   ↓
기계어

LLVM 자체는 컴파일러가 아니라 플랫폼에 가깝다.

Clang ?

Clang은 LLVM 프로젝트에서 제공하는 C 계열 언어용 컴파일러 프론트엔드다.

Clang이 하는 일

  • C / C++ / Objective-C 소스 파싱
  • AST(Abstract Syntax Tree) 생성
  • LLVM IR 생성
  • 에러 메시지 생성

즉,

Clang = “C/C++ 언어를 LLVM IR로 바꿔주는 역할”

이다.

Clang vs GCC

자주 비교되는 대상이 GCC다.

구조 차이

항목Clang/LLVMGCC
구조모듈형 (프론트/백엔드 분리)단일 프로젝트
중간 표현LLVM IRGIMPLE / RTL
에러 메시지매우 친절비교적 딱딱
컴파일 속도빠른 편느린 편
툴 연계분석/포맷/정적분석 풍부전통적

에러 메시지 예시 느낌

Clang:

error: expected ';' after expression
   foo()
        ^

GCC:

error: expected ';' before '}'

Clang이 “사람이 읽기 쉬운 컴파일러”라는 말이 나오는 이유다.

왜 요즘 Clang/LLVM을 많이 쓰나

1. 커널·시스템 개발에서 중요해짐

  • Linux kernel도 Clang 빌드 공식 지원
  • sanitizer(KASAN, UBSAN, TSAN 등)와 궁합이 좋음
  • BPF / eBPF 생태계와 밀접

2. 분석 도구가 강력함

  • clang-tidy
  • clang-format
  • clang-analyzer
  • LLVM sanitizer 계열

3. 다양한 언어가 LLVM 위에 올라감

  • Rust
  • Swift
  • Julia
  • Zig

즉,

LLVM = 현대 컴파일러 생태계의 공용 토대

가 되었다고 보면 된다.

정리하면?

  • LLVM은 컴파일러를 만들기 위한 공통 인프라
  • Clang은 C/C++을 LLVM IR로 변환하는 프론트엔드
  • GCC는 전통적 올인원 컴파일러, Clang/LLVM은 모듈형 생태계
  • 커널, BSP, 성능 분석, sanitizer 쪽에서는 Clang/LLVM 비중이 계속 커지는 중

참고:

답글 남기기