반응형
스위프트 컴파일러가 .swift 소스파일을 컴파일하는 과정은 스위프트 언어를 스위프트 중간언어(swift intermediate language)로 우선 만들고, 이것을 다시 llvm IR ( intermediate representation ) 으로 바꾸고, 마지막으로 기계어를 생성하는 단계를 거친다.
.swift 소스에서 변환된 SIL 을 보려면 swiftc 를 이용하여 -emit-sil 옵션으로 컴파일 하면 된다.
swiftc -emit-sil <filename>.swift
아주 간단한 Point 스트럭쳐를 선언하여, 이를 sil 로 변환하면 다음과 같다.
struct Point {
let x:Int
let y:Int
}
struct Point {
@_hasStorage let x: Int { get }
@_hasStorage let y: Int { get }
init(x: Int, y: Int)
}
// Point.x.getter
sil hidden [transparent] @$s5point5PointV1xSivg : $@convention(method) (Point) -> Int {
// %0 "self" // users: %2, %1
bb0(%0 : $Point):
debug_value %0 : $Point, let, name "self", argno 1, implicit // id: %1
%2 = struct_extract %0 : $Point, #Point.x // user: %3
return %2 : $Int // id: %3
} // end sil function '$s5point5PointV1xSivg'
// Point.y.getter
sil hidden [transparent] @$s5point5PointV1ySivg : $@convention(method) (Point) -> Int {
// %0 "self" // users: %2, %1
bb0(%0 : $Point):
debug_value %0 : $Point, let, name "self", argno 1, implicit // id: %1
%2 = struct_extract %0 : $Point, #Point.y // user: %3
return %2 : $Int // id: %3
} // end sil function '$s5point5PointV1ySivg'
// Point.init(x:y:)
sil hidden @$s5point5PointV1x1yACSi_SitcfC : $@convention(method) (Int, Int, @thin Point.Type) -> Point {
// %0 "$implicit_value" // user: %3
// %1 "$implicit_value" // user: %3
// %2 "$metatype"
bb0(%0 : $Int, %1 : $Int, %2 : $@thin Point.Type):
%3 = struct $Point (%0 : $Int, %1 : $Int) // user: %4
return %3 : $Point // id: %4
} // end sil function '$s5point5PointV1x1yACSi_SitcfC'
728x90
'프로그래밍 > SWIFT' 카테고리의 다른 글
[SWIFT] 'main' attribute cannot be used in a module contains top-level code (0) | 2024.04.29 |
---|---|
VSCode Swift Formatter 설정 (0) | 2023.09.22 |
SwiftUI] StateObject, Published, ObservableObject (0) | 2023.07.11 |
[유튭링ㅋ] Mastering Concurrency in iOS (0) | 2023.06.22 |
[Swift] 가장 간단한 Actor 샘플코드, Actor Counter (0) | 2023.06.14 |