2022. 9. 8. 01:35ㆍswift
패키지를 확장할 때 모듈 충돌이 발생할 수 있다
그래서 Swift 5.7에서는 모듈 명확화를 도입했다.
모듈 명확화는 모듈을 정의하는 패키지 외부에서 모듈 이름을 변경할 수 있는 기능입니다.
여기 Stunnung 응용 프로그램에서
로깅 모듈을 정의하는 두 개의 패키지를 가져오자
이 둘은 충돌합니다.
이 Stunning 응용프로그램에서 문제를 해결하려면
패키지 매니페스트의 종속성 섹션에
moduleAliases 키워드를 추가하기만 하면 됩니다.
사진처럼 두 개의 다른 이름을 사용하여
이전에 이름이 같았던 모듈을 구분할 수 있습니다.
빌드 시간
swift의 소스 코드 컴파일을
조정하는 프로그램인 Swift Driver를
어떻게 재작성했는지 말씀드렸다.
작년에 재구축은 빌드 속도를 크게 높이는
매우 중요한 변경 사항을 몇 가지 도입했습니다.
xcode 빌드 시스템 내에서 직접 프레임워크로 사용할 수 있습니다. 이를 통해 더욱 밀접하게 빌드를 조정하여 병렬화 등의 작업을 수행할 수 있습니다.
(빠른 빌드라는 말을 좋아하는 사람이라면 Xcode 빌드에서의 병렬화 설명 세션을 참조했으면 좋겠습니다.)
(얼마나 빨라졌는지 예시
10-core imac의 경우 속도 5%-> 최대 25% 증가 개선되었습니다.)
다음으로 유형 검사의 속도 개선을 했다.
올해는 제네릭 시스템의 핵심 부부인
프로토콜과 'where'절에서 함수 서명을
계산하는 부분을 다시 구현하여 유형 검사 성능을 개선했습니다.
이전 구현에서는 더 많은 프로토콜이 포함될수록
시간과 메모리 사용량이 기하급수적으로 증가했습니다.
예를 들어 좌표계를 정의하는 복잡한 프로토콜 집합을 가지고 있으며 많은 관련 유형에 대한 제네릭 요구 사항이 있습니다.
이 코드를 검사하는데 17초가 걸렸습니다.
하지만 이번 Swift 5.7에서는 1초 이내에 유형검사를 상당히 빠르게 수행할 수 있다!
런타임 개선 사항도 몇 가지 있습니다.
런타임 개선 사항도 몇 가지 있습니다.
Swift 5.7 이전에서는 앱 시작 시 프로토콜 검사 시간이 4초까지 걸리기도 했습니다.
앱을 실행할 때마다 프로토콜을 계산해야하고 프로토콜을 추가할수록 실행 시간이 길어졌습니다.
그렇치만 이제는 캐시 처리됩니다.
따라서 사용된 프로토콜의 양에 따라
ios16에서 실행할때 실행시간이 절반으로 단축될 수 있습니다.
이번에는 데이터 레이스 안전을 최우선으로 삼아 모델을 더욱 구체화했다.
동시성 코드 베이스를 근본적으로 개선하는 중요한 요소였기 때문에 ios13 , macOS Cataline로 역 배포할 수 있도록 만들었습니다.
이전 운영 체제에 배포할 수 있도록 앱은 이전 OS용 Swift 5.5 동시성 런타임 복사본을 번들로 제공한다.
다음으로 우리는 이 모델을 새로운 방향으로 가져갔습니다. 언어 기능과 지원 패키지를 도입했습니다.
먼저 데이터 레이스 회피부터 살펴보겠습니다.
예측 불가능한 동작을 유발할 수 있는 동시성 버그를 방지하고자 합니다.
이런 코드를 실행하게 된다면 어떻게? 어떤데 먼저 호출될까요??
정답은!!.
이 작업을 수행하지 못하게 차단합니다.
액세스 권한을 행위자와 동기화하지 않고
배경 작업에서 배열을 수정하는 건 안전하지 않으니깐요
행위자는 데이터 레이스를 없애기 위한 첫 번째 주요 단계였다
기본값으로 메모리 안전부터 스레드 안전까지 보장하는 게 Swift 6의 목표다
이런 목표를 달성하기 위해서 먼저 동시성 모델을 방금 언급한 새로운 언어 기능으로 개선했다.
두 번째는 잠재적인 데이터 레이스를 식별하는 새로운 옵트인 안전 검사이다.
게임 앱을 만든다는 과정을 해볼 때
Swift에서 백엔드는 쉽게 작성할 수 있습니다.
위 코드에서 분산된 행위자는 행위자와 비슷하지만
다른 기계에?? 있을 수 있습니다.
분산 키워드는 원격 컴퓨터에 있을 수도 있는 행위자에 대해 호출해야 한다고 예상되는 함수에 추가할 수도 있습니다.
2번째 사진 함수 추가
플레이어를 루프 하여 각 플레이어에 makeMove를 호출한다. 일부는 로컬, 원격 일수 있지만 누가 어느 쪽인지 신경 쓸 필요 없는 장점을 누릴 수 있다.
일반 행위자 호출과의 유일한 차이점은
네트워크 오류로 인해 분산 행위자 호출이 잠재적으로 실패할 수 있다는 점입니다.
네트워크에 장애가 발생할 경우 행위자 메서드가 오류를 발생시킵니다.
그래서 행위자 외부에서 함수를 호출할 때 일반적인 wait키워드와 함께 try도 추가해야 합니다.
추가적으로 분산 행위자 패키지도 구축했다.
(이 새로운 강력한 API를 사용하는 방법을 알아보려면 Swift 비동기 알고리즘 강연을 확인하자!)
올해는 행위자 우선순위제를 통해
행위자가 우선순위가 가장 높은 작업을 먼저 수행한다. 또한 운영 체제 스케줄러와의 긴밀한 통합을 지속하여 모델에는 우선 순위 역전 방지 기능이 기본적으로 제공되므로 우선순위가 높은 작업을 덜 중요한 작업이 방해할 수 없습니다.!
과거에는 앱에서 동시성 성능에 미치는 영향을 시각화 하기가 매우 어려웠지만 이제는 정확히 해낼 수 있는 새로운 도구를 갖게 됐다.
1.Instruments의 새로운 Swift Concurrency 뷰를 통해 성능 문제를 조사할 수 있습니다.
2.Swift Tasks 및 Swift Actors Instruments는 동시성 코드를 시각화하고 최적화하도록 지원하는 전체 도구 제품군을 제공합니다.
최상위 수준에서는 Swift Tasks Instrument가 동시에 실행되는 작업의 수와 해당 시점까지 생성된 총작업을 포함하여 유용한 통계를 제공합니다.
아래 사진을 보면서
Task Forest라는 항목을 볼 수 있다.
구조화된 동시성 코드에서 작업 간의 상하 관계를 그래픽으로 표현하여 제공합니다.
이는 Swift Actor Instrument에 대한 상세 뷰 중 하나입니다.
'swift' 카테고리의 다른 글
What's new in Swift(wwdc2022) [3] (2) | 2022.09.08 |
---|---|
What's new in Swift(wwdc2022) [2] (1) | 2022.09.08 |
고차함수 map! (0) | 2022.09.07 |
lazy var에 대해 알아보자 (0) | 2022.09.06 |
메모리 영역을 알아보자! (0) | 2022.07.25 |