Swift 컴파일, 컴파일러
2023. 2. 14. 18:16ㆍSwift
반응형
Swift Compile
컴파일?, 컴파일러?란?
- 컴파일러란 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 번역 프로그램을 의미한다.
- 컴파일러는 대부분 사람이 쓰는 프로그래밍 언어를 기계어로 바꾸는데 사용되는데 사람이 쓰는 프로그래밍 언어를 소스코드 혹은 원시코드라고 말한다.
- 반대로 컴파일러를 통해 바꿔진 최종 출력물을 목적 코드라고 명하는데, 이는 다른 프로그램이나 하드웨어가 처리하기 용한 형태 즉 기계어쪽 상태로 출력되지만, 사람이 볼 수 있는 문서나, 그림형태로 출력되기도 한다.
- 컴파일이란 위에서 설명한 소스코드 혹은 원시코드를 목적코드로 번역? 옮기는? 과정을 컴파일이라고 한다.
왜 컴파일을 하는 것일까?
- 우리가 소스코드를 작성는 이유는 Mac, 아이폰, 안드로이드, PC와 같은 기계에서 실행되는 프로그램을 만들기 위함이다.
- 다만, 이 소스코드는 기계가 이해하기에는 어려운 고급 프로그래밍 언어이므로 이를 기계가 이해하기 편한 저급 프로그래밍 언어로 만들기 위함이다.
- 또한 컴파일러는 컴파일을 하여 최종 결과물을 내놓는다. 이는 XCode내에서 시뮬레이션에서 바로 동작하는 앱을 실행하거나, 터미널에서 표시되는 결과물을 출력한다.
- 즉, 우리는 기계에서 동작하는 무언가을 만들기 위해 기계에서 사용가능한 최종적인 프로그램 형태로 받기위해 컴파일러를 이용해서 컴파일을 하는것이다.
Swift의 컴파일형태는??
- 우리는 iOS앱을 만들 때 저 재생버튼 혹은
Product->Run
을 클릭하여 시뮬레이터에서 작동을 확인한다.
- 이렇게 우리는 시뮬레이션에서 해당 앱의 동작을 확인할 수 있는데 Swift의 컴파일러는 어떤상태로 동작을 할까??
Swift Compiler Architecture
- 스위프트는 LLVM컴파일러를 사용한다
- 다만, LLVM컴파일러를 곧바로 사용하는 것이 아닌 여러 구조를 거친 이후에 LLVM컴파일러를 통해 컴파일 된다.
1. Parsing
- Parsing은 소스코드의 추상구문트리(AST)라는것을 생성하며 문법적 문제에 관하여 경고나 에러를 개발자에게 보여준다.
while b != 0 {
if a > b {
a -= b
} else {
b -= a
}
return a
}
- 해당 구문이 Parsing구조에 들어가게 된다면 AST를 생성하는데 이는 아래와 같은 그림 형태로 생성된다.
2. Semantic analysis
- 해당 구조는 위에서 생성된 AST를 확인하는 역할을 합니다.
- 예를 들어 Parsing 구조의 소스코드의
a
,b
에 관하여 변수인지, Int값인지, 비교가능한 값인지에 대한 추론을 한다. - 만약 이 과정에 성공할 경우 해당 AST가 안전하다는 것을 나타낸다.
3. Clang importer
- 이 구조는 Modules — Clang(LLVM) 해당 모듈을 불러와서
objective-C
혹은C언어
관련 API를 Swift API로 보내주어 LLVM에서 해당 언어를 분석한다.
4. SIL generation
- 이제 고급프로그래밍언어 Swift로 작성된 소스코드를 곧바로 기계어로 번역하는 것이 아닌 한단계 아래인 중급언어로 낮춘다.
- Swift를 한단계 낮춘 중급표현, 중간표현인 SIL(Swift Intermediate Language)을 생성한다.
5. SIL guaranteed transformations
- 위에서 만들어진 SIL을 검증하는 단계이다.
- 예를들어 소스코드에서 초기화되지않은 변수를 사용한거와 같이 프로그램의 정확성에 영향을 미치는 흐름 진단한다고 한다.
- 이를 통과할 경우
canonical SIL
이라는 결과를 내놓는데 정확한 의미는 모르겠지만 정규화 된 SIL? 이런 뜻 인것 같다.
6. SIL optimizations
- 이는 위에서 생성 된
canonical SIL
을 최적화 시키는 단계이다. - 위 SIL을 분석하고 ARC, V-Table등에 관하여 최적화를 실행한다.
7. LLVM IR generation
- 이후에 LLVM IR로 생성하여 LLVM을 통해 다시 최적화하는 단계이다.
- IR은 기계의 아키텍쳐 (Intel, ARM)등에 맞는 기계어로 바꾼 형태인 것 같다.
최종 구조
참고자료
반응형
'Swift' 카테고리의 다른 글
Mirror 란? (0) | 2023.05.12 |
---|---|
JSON Decoding 재활용 (0) | 2023.03.03 |
ARC-간단정리 (0) | 2023.02.07 |
Closures 간단 정리 (2) | 2023.02.06 |
정규표현식(Swift) (0) | 2023.01.29 |