Clang
Clang은 LLVM 프로젝트의 C 언어 계열 프런트엔드이자 소스 코드 분석·개발 도구 기반이다. C·C++·Objective-C·Objective-C++ 등을 처리하고 구문 분석·타입 검사·진단 및 추상 구문 트리(AST)를 구성한 뒤 LLVM IR이나 다른 내부 출력을 생성한다. c...
| 분류 | C 언어 계열 컴파일러 프런트엔드·도구 인프라 |
|---|---|
| 개발 조직 | LLVM Project 공동체 |
| 기술 기반 | LLVM |
| 주요 언어 | C, C++, Objective-C, Objective-C++, OpenCL·CUDA 계열 지원 |
| 실행 명령 | clang, clang++, clang-cl |
| 프로그램 분석 | 토큰·AST·Sema·진단 시스템 |
| 백엔드 | LLVM IR·LLVM 코드 생성 |
| 개발 도구 | clangd, clang-format, clang-tidy, Clang Static Analyzer |
| 플랫폼 | Linux, Windows, macOS 및 여러 대상 |
| 라이선스 | Apache 2.0 with LLVM Exceptions |
| 공식 사이트 | clang.llvm.org |
| 사용 안내 | Clang User's Manual |
Clang은 LLVM 프로젝트의 C 언어 계열 프런트엔드이자 소스 코드 분석·개발 도구 기반이다. C·C++·Objective-C·Objective-C++ 등을 처리하고 구문 분석·타입 검사·진단 및 추상 구문 트리(AST)를 구성한 뒤 LLVM IR이나 다른 내부 출력을 생성한다. clang·clang++ 드라이버가 실제 컴파일 작업을 시작하며, MSVC 호환 명령줄을 위한 clang-cl도 제공된다. Clang은 LLVM 전체와 구별되는 프로젝트이지만 두 기술을 조합해 네이티브 코드를 만든다.[1]
Clang의 프런트엔드는 전처리·토큰화·구문 분석, 이름 해석·오버로드 선택과 타입 검사, AST 구축으로 이루어진다. 사용자에게 전달하는 진단 메시지의 위치·문맥과 수정 제안에 중점을 두며 프로그램이 아직 오류를 포함해도 가능한 구문·타입 정보를 개발 도구가 이용하도록 설계됐다. AST와 SourceManager를 재사용하면 단순 컴파일뿐 아니라 IDE의 자동 완성·리팩터링 및 코드 검사 도구를 구현할 수 있다.[2]
Clang은 LLVM 백엔드와 연결하여 기계 코드를 만들거나 LLVM IR·어셈블리 등 중간 출력을 생성할 수 있다. 대상 CPU·ABI·표준 라이브러리·시스템 헤더의 선택이 실행 바이너리 호환성에 중요한 영향을 준다. GCC 및 MSVC와의 실용적 호환성을 목표로 하지만 모든 비표준 확장·경고·ABI 동작이 완전히 동일한 것은 아니다.
주변 도구에는 언어 서버인 clangd, 코드 양식 도구 clang-format, 정적 검사기 clang-tidy, Clang Static Analyzer 등이 있다. 이들은 Clang의 파싱·AST 정보를 재사용하지만 각각 별도의 목적과 설정·명령줄을 갖는다. 컴파일러 프런트엔드가 코드 생성뿐 아니라 편집기·정적 분석 시스템의 기반이 되는 대표적 사례다.[3]
Clang의 주요 코드는 LLVM Exceptions가 있는 Apache License 2.0으로 공개된다. 도구 사용에는 소스 언어 규칙·표준 버전과 표적 플랫폼이 관여하므로 명령 clang 자체를 독립 백엔드나 실행 파일 형식으로 혼동하지 않아야 한다. GCC·LLVM·Clang은 서로 관련되지만 별도 개발 프로젝트와 역할을 가진다.