Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

sanichdaniel의 iOS 개발 블로그

빌드 타임 개선 본문

swift

빌드 타임 개선

sanich8355 2020. 10. 14. 21:44
빌드 타임이 어디서 오래걸리는지 측정해보았다. 
Build Settings의 “Swift Compiler - Custom Flags”, “Other Swift Flags” 에서
-Xfrontend -warn-long-expression-type-checking=<limit> 옵션을 추가해주고 빌드해본 결과
== 비교 연산자를 사용하는곳에서 warning이 많이 나왔다. 

비교 연산자 타입추론이 오래 걸리는 이유?

비교 연산자 == 은 수많은 곳에서 overload되는 operator이다. (overload: 같은 이름의 다른 메서드들)

swift standard library에서만 73곳에서 overload되고 있고, 커스텀하게 만든 타입들에서도 자주 overload 된다.

operator는 글로벌 함수처럼 호출되기에, 컴파일러는 모든 ==의 overload를 확인해야한다.

즉 자주 overload 되는 모든 operator들에서는 비교연산자와 같은 퍼포먼스 이슈가 있을것으로 보인다.

개선방안

protocol extension의 메서드로 바꿔주기

extension Equatable {
   func equals(_ object: Self?) -> Bool {
      guard case object = self else { return false }
      return true
   }
}

메서드인 경우 컴파일러가 타입추론하기 훨씬 쉽다.

컴파일러는 메서드가 호출된 base 타입의 overload만 확인하면 되기 때문이다. 

 

또한 내부적으론 패턴매칭을 이용하여 equality를 비교한다.

패턴매칭은 내부적으로 ~= operator을 사용하는데, == 보단 일반적으로 적게 overload되기에 타입추론이 더 빠르다.

 

출처

forums.swift.org/t/swift-equality-operator-takes-long-time-to-type-check/41226/8

www.swiftbysundell.com/articles/improving-swift-compile-times

www.cocoawithlove.com/blog/2016/07/12/type-checker-issues.html

'swift' 카테고리의 다른 글

양방향 타입추론  (0) 2020.10.22
Operator Overloading  (0) 2020.10.16
Pure functions in swift  (0) 2020.10.14
일급 시민 함수 - swift  (0) 2020.10.14
Identifiable  (0) 2020.10.07