Swift 컴파일러 모노레포 개요¶
Swift는 고성능 시스템 프로그래밍 언어로, 현대적 구문과 메모리 안전성을 제공한다. 이 모노레포(swiftlang)는 Swift 컴파일러와 관련 도구 전체를 포함한다.
컴파일러 파이프라인¶
Swift Source → Parser → Sema(TypeChecker) → SILGen → Mandatory Passes
→ Canonical SIL → Optimization Passes → IRGen → LLVM IR → Machine Code
- Parser: Swift 소스에서 AST(Abstract Syntax Tree) 구성
- Sema/TypeChecker: AST 타입 검사 및 주석 — 제약 기반 양방향 타입 추론 사용 (타입 체커 설계 및 구현)
- SILGen: AST에서 raw SIL 생성
- Mandatory Passes: 필수 최적화 및 진단 → canonical SIL 생성
- Optimization Passes: 성능 최적화 (ARC, devirtualization, 제네릭 특수화 등) (Swift 옵티마이저 설계)
- IRGen: SIL → LLVM IR 하위 변환
- LLVM Backend: LLVM 최적화 및 기계 코드 생성
모노레포 구성¶
컴파일러 코어 (swift/)¶
lib/AST/— AST 정의 및 조작lib/Parse/— 파서lib/Sema/— 의미 분석 (타입 검사)lib/SILGen/— SIL 생성lib/SIL/— SIL IR 자료 구조lib/SILOptimizer/— SIL 최적화 패스lib/IRGen/— LLVM IR 생성lib/SwiftDemangle/— 심볼 디맹글링
LLVM/Clang (llvm-project/)¶
LLVM IR 최적화 및 코드 생성 백엔드. Clang Importer가 C/Objective-C 선언을 Swift에 노출한다.
표준 라이브러리 (swift/stdlib/, swift-foundation/)¶
Swift 표준 라이브러리(swiftCore)와 Foundation 구현.
패키지 및 도구¶
swift-syntax/— Swift 구문 분석 라이브러리 (매크로 기반)swift-driver/— 컴파일러 드라이버swiftpm//swift-build/— Swift Package Managersourcekit-lsp/— SourceKit LSP 서버swift-format/— 코드 포매터swift-testing/— Swift Testing 프레임워크
주요 문서¶
컴파일러 코어¶
- 컴파일러 용어 사전 — 컴파일러 용어 사전
- SIL (Swift Intermediate Language) — SIL 중간 표현 명세
- Swift 옵티마이저 설계 — 옵티마이저 파이프라인 설계
- 타입 체커 설계 및 구현 — 타입 체커 설계 및 구현
- Request Evaluator — 요청 기반 평가 아키텍처
- 진단 시스템 (Diagnostics) — 진단 시스템
- 바이너리 직렬화 형식 — 바이너리 직렬화 (swiftmodule)
- 의존성 분석 (증분 빌드) — 증분 빌드 의존성
- Swift 컴파일러 드라이버 — 컴파일 모델과 드라이버
- 컴파일러 디버깅 가이드 — 컴파일러 디버깅 가이드
- 컴파일러 성능 측정 — 성능 측정
- Compiling Swift Generics — 제네릭 컴파일 (책)
- Generic Signatures — 제네릭 시그니처
- Substitution Maps — 치환 맵
- Archetypes — 아키타입
- Conformances — 프로토콜 준수
ABI¶
- ABI: 심볼 맹글링 — 심볼 맹글링/디맹글링
- ABI: 타입 메타데이터 — 타입 메타데이터 레이아웃
- ABI: 타입 레이아웃 — 타입 메모리 레이아웃
- ABI: 호출 규약 — 호출 규약
- ABI 안정성 — ABI 안정성과 Library Evolution
- ABI: 제네릭 시그니처 — 제네릭 시그니처 ABI
- Swift 런타임 — Swift 런타임 ABI
코드 구조 분석¶
- SIL 옵티마이저 패스 카탈로그 — 205개 SIL 패스 전체 카탈로그
- AST 노드 계층 구조 — AST 노드 계층 (Decl/Expr/Stmt/Type)
- SwiftCompilerSources (Swift-in-Swift) — Swift-in-Swift 컴파일러 (165 파일)
Interop (ObjC / C / C++)¶
- Objective-C 상호운용 — Swift ↔ ObjC 상호운용
- C에서 Swift로의 이름 변환 — C/ObjC 이름 변환
- Swift의 C API 임포트 방식 — C API 임포트 매핑
- C++ 상호운용성 개요 — C++ Interop 개요
- C++를 Swift에서 사용하기 — Swift에서 C++ 사용
- C++에서 Swift 호출하기 — C++에서 Swift 호출
언어 설계¶
- 소유권 매니페스토 — 소유권 시스템
- 제네릭 매니페스토 — 제네릭 시스템 비전
- 에러 처리 설계 — 에러 처리 모델
- 동적 캐스팅 동작 — 동적 캐스팅 규칙
- Swift 모듈 시스템 — 모듈 시스템
- Swift 접근 제어 — 접근 제어
- 리터럴의 타입 체킹과 추론 — 리터럴 타입 추론
- 실패 가능한 이니셜라이저 (init?) — 실패 가능 이니셜라이저
- 라이브러리 진화 (Library Evolution) — Library Evolution
- 고수준 SIL 최적화 — 고수준 SIL 최적화
- @_transparent 속성 — @_transparent
기여 가이드¶
- Swift 개발 환경 설정 — 개발 환경 설정
- 첫 번째 Pull Request 제출 — 첫 PR 가이드
- 컴파일러 개발 FAQ — FAQ
- Swift 테스트 가이드 — 테스트 스위트
- 지속적 통합 (CI) — CI
- 컴파일러 개발 팁 — 개발 팁
- 표준 라이브러리 프로그래머 매뉴얼 — stdlib 기여 가이드
패키지 및 도구¶
- swift-syntax — SwiftSyntax (구문 분석/매크로)
- swift-driver (패키지) — 컴파일러 드라이버 패키지
- Swift Package Manager — Swift Package Manager
- SourceKit-LSP — SourceKit LSP
- Swift Testing — Swift Testing
- Swift Foundation — Foundation
- Swift Collections — Collections
- SwiftNIO — SwiftNIO
- llbuild — llbuild (저수준 빌드 엔진)
- Swift Build — Swift Build
- swift-format — swift-format