콘텐츠로 이동

Swift 툴체인 스택

Swift Compiler를 이해하거나 기여하려면 Swift 언어 자체만이 아니라, 그 언어를 둘러싼 툴체인과 인프라를 함께 알아야 한다. 이 페이지는 그 기술 스택을 위에서 아래로 정리한 지도다.

한눈에 보는 스택

구성 요소 관련 페이지
언어/문서 층 TSPL, 공식 문서 허브, manifesto류 공식/다운로드 문서 해설 허브, Swift 언어 개요
프론트엔드 층 Parser, AST, Sema, diagnostics, request evaluator Swift 컴파일러 모노레포 개요, 타입 체커 설계 및 구현, 진단 시스템 (Diagnostics), Request Evaluator
IR 층 SILGen, SIL, mandatory passes, optimizer, IRGen, LLVM IR SIL (Swift Intermediate Language), Swift 옵티마이저 설계, 컴파일러 성능 측정
백엔드/interop 층 LLVM, Clang Importer, C/ObjC/C++ interop Objective-C 상호운용, C++ 상호운용성 개요, Swift의 C API 임포트 방식
드라이버/빌드 층 swift-driver, SwiftPM, llbuild, Swift Build, dependency analysis Swift 컴파일러 드라이버, swift-driver (패키지), Swift Package Manager, llbuild, Swift Build
편집/툴링 층 SwiftSyntax, SourceKit-LSP, swift-format swift-syntax, SourceKit-LSP, swift-format
디버그/테스트/인프라 층 LLDB, CMake, Ninja, lit, FileCheck, CI 컴파일러 디버깅 가이드, Swift 개발 환경 설정, Swift 테스트 가이드, 지속적 통합 (CI)

왜 이 스택이 중요한가

Swift Compiler는 단일 바이너리만 가리키지 않는다. 실제로는 여러 저장소, 여러 빌드 도구, 여러 테스트 시스템, 여러 편집/분석 도구가 함께 움직이는 생태계다.

즉 “Swift Compiler를 배운다”는 말은 보통 다음을 함께 배운다는 뜻이다.

  • 언어 의미가 어디서 판정되는가
  • 어떤 중간표현을 거쳐 최적화되는가
  • 어떤 빌드 도구가 전체 파이프라인을 조율하는가
  • 어떤 디버깅/테스트 인프라로 검증하는가
  • 어떤 패키지와 도구가 개발자 경험을 만든다

핵심 구성 요소별 역할

1. LLVM / Clang

  • LLVM은 Swift가 최종적으로 내려가는 백엔드 최적화/코드 생성 기반이다.
  • Clang은 C/ObjC 세계와의 상호운용에서 중요한 축이며, Swift는 Clang Importer를 통해 선언을 가져온다.
  • C++ interop도 이 축의 확장선에 있다.

연결 페이지: - Swift 컴파일러 모노레포 개요 - LLVM 백엔드와 Swift - Clang Importer - Objective-C 상호운용 - C++ 상호운용성 개요 - 컴파일러 성능 측정

2. swift-driver / SwiftPM / llbuild

  • swift-driver는 컴파일 파이프라인을 구성하고 작업을 스케줄한다.
  • SwiftPM은 패키지 그래프와 빌드 설정의 중심이고, 실제 컴파일 호출과도 이어진다.
  • llbuild는 저수준 작업 그래프 실행 엔진이다.

연결 페이지: - Swift 컴파일러 드라이버 - swift-driver (패키지) - Swift Package Manager - llbuild - 의존성 분석 (증분 빌드)

3. SwiftSyntax / SourceKit-LSP / swift-format

  • SwiftSyntax는 파싱된 구조를 도구 친화적으로 다루게 해 준다.
  • SourceKit-LSP는 IDE와 에디터 경험의 핵심 축이다.
  • swift-format은 문법 구조와 규칙 기반 포매팅의 예시다.

연결 페이지: - Swift 매크로·도구 스택 - swift-syntax - SourceKit-LSP - swift-format

4. CMake / Ninja / lit / FileCheck / LLDB

  • CMake는 대규모 빌드 구성을 정의한다.
  • Ninja는 빠른 증분 빌드 실행기다.
  • lit와 FileCheck는 Swift 컴파일러 테스트 문화의 핵심이다.
  • LLDB는 컴파일러 자신이나 결과 프로그램을 디버깅할 때 중요하다.

관련 기존 페이지: - Swift Compiler 빌드·테스트·디버그 스택 - CMake와 Ninja 빌드 인프라 - lit와 FileCheck - LLDB와 Swift 디버깅 - Swift 개발 환경 설정 - 컴파일러 개발 팁 - Swift 테스트 가이드 - 컴파일러 디버깅 가이드 - 컴파일러 개발 FAQ

배울 때 어떤 순서가 좋은가

  1. swift 저장소의 프론트엔드/SIL/IRGen 큰 흐름 이해
  2. swift-driver, SwiftPM, llbuild의 빌드 흐름 이해
  3. lit/FileCheck/LLDB/CMake/Ninja 기반의 실무 루프 익히기
  4. SwiftSyntax / SourceKit-LSP / formatter 같은 도구 계층까지 확장하기

최소 필수 스택 vs 확장 스택

최소 필수

강하게 추천

확장 심화

같이 보면 좋은 페이지