우선 Swift를 다시 공부하기 전에 나도 1년동안 했는데 머리가 좀 커졌잖아?? 그러니 하나하나 할때 Deep Dive를 해보자!!
Swift는 우선 스크립트 언어가 아닌! 함수형언어이자 컴파일 언어이다.
먼저 스크립트 언어란? 컴파일러 없이 한줄 한줄 읽으며 실행한다.번역속도는 빠르지만 매번 실행시킬때마다 한줄한줄...읽어야해서 프로그램 실행속도는 컴파일언어보다 느리다. 컴파일 과정이 없어서 실행해봐야 오류가 있는지없는지 안다.
컴파일언어란?소스코드를 컴파일러가 컴파일 하여 objc파일로 만들고 링커가 실행파일로 만드는 과정이 필요한 언어.
Swift Compile과정!!!
1. 먼저 컴파일전에 전처리를 한다 (#define, #include)요론놈들
2. 파싱을 함. 전처리된 소스코드를 토큰단위로 분석하고 이를 문법적으로 분석하여 AST(추상 구문 트리)생성.
문법에러 체크
3. Semantic analysis : 파싱된 AST를 받아서 타입 체크를 포함한 완전한 AST로 바꾼다.
여기서 만약 타입추론. 타입체크 실패하면 경고나 오류를 발생시킴. 이 과정을 거치면 타입이 완전히 확인된상태! 이후 단계에서 안전한 코드!!!
4. Clang모듈을 가져와서 해당 모듈이 내보내는 C또는 Objective-C API를 Swift API로 매핑해준다.
5. 타입체크된완전한 AST를 raw SIL(고수준의 Swift 특화 중간언어)로 변환! 여기부터가 이제 Swift 컴파일러가 매력적인 이유
6. 프로그램 정확성에 영향을 주는 추가적인 데이터 흐름 진단을 수행한다 이를 SIL을 조금더 변환(보완)한다고 생각하면 될듯!
여기서 이제 초기화되지 않은 변수의 사용같은 오류를 검출하는 단계
7. SIL최적화함 ex) ARC최적화, 제너릭 특수화 등
8. 이제 그리고 LLVM IR 생성 등장!
LLVM?= Low Level Virtual Machine = 컴파일러의 집합이고 툴체인 기술이다.
? 낮은단계가상머신? Swift는 뛰어난 고성능 LLVM Compiler를 사용하여 최신 하드웨어를 최대한 활용할 수 잇도록 최적화된 기본코드로 변환한다고 한다.
What is ToolChian?
A ToolChain is a set of tools that compiles source code into executables that run on your target device and normally includes a compiler liner, and run time libiaries
즉 소스코드가 실행파일로 바뀌는데 필요한도구들이 다 툴체인이다. 우리가 흔히아는 컴파일러, 링커, 런타임라이브러리가 포함된다한다.
LLVM은 이렇게 다 모듈화되어있어서 안에서 뭐하는지 다볼수있고 내가 사용하고 싶은데로 믹스매치할수도 있음.
가운데에 있는 LLVM Optimizer라는 얘가 가장 중요한건데 LLVM-IR이라고 부른다고 한다.
- LLVM IR은 어떤 아키텍쳐에 특화된게 아닌 가상 언어임. 이것은 머신코드의 제너릭 표현임. 즉 어떤 아키텍쳐에도 다됨.
1. 저 빨간 앞부분에서 우리가 사용할 언어로 되어있는 소스코드를 LVM-IR로 번역을 한다.
2. 노란부분이 각각의 다른 아키텍쳐로 컴파일 해줄수 있다. \
애플은 저 빨간공간에 그냥 SIL라는 박스를 만든거임 LLVM이 알아서 macOS, iOS, watchOS다 되도록 어셈블리 코드와 OBJECT파일을 만들어줌!
이제 그러면 링킹(여러 오브젝트 파일이나 라이브러리를 링크하여 하나의 실행파일로 만들어줌)을 해야죠.
우리가 XCODE에서 빌드한다 빌드한다 이러자나? 이게 위에서 작성한 모든과정을 하는거임!! 대단한거지 아주
참고:
'Swift' 카테고리의 다른 글
Function(1급시민 , inout & 클로저✨) (0) | 2024.03.04 |
---|---|
Assertions && Preconditions (0) | 2024.03.02 |
Swift 5.9 Updates (2) | 2023.10.10 |
Combine(2)- Operator (1) | 2023.10.08 |
TaskGroup (0) | 2023.08.13 |