What’s new in Swift

New Features in Swift 5.7

Swift의 목표는 개발자의 삶은 더 쉽게 만들기 위함이라고 함!

Community update

Swift Website(new)

Image

  • docC와 Swift를 통해 커뮤니티에서 더 활성화되고 있음
  • swift.org는 opensource이며 많은 개발자가 참여 중

    Open Source를 적극적으로 관리할 때 Swift와 제품은 가장 잘 작동

Swift on Server

C++ Interoperability

  • Swift on Server, Swift의 다양한 작업 그룹 모델을 사용 중인데,
    • 이것을 이제 두 개의 새로운 작업 그룹으로 시작함
      • Swift Website, community resouce
      • C++, Swift 간의 모델 디자인을 형성하기 위한 운용

Diversity in Swift

  • Swift를 쉽게 사용할 수 있도록 Linux 플랫폼 배포 간소화(RPM 지원)
    • Amazon Linux 2
    • CentOS 7
      • 하지만 매우 실험적이기 때문에 피드백을 원함

Swift는 서버에 더 잘 지원하기 위해 노력하고 있음

Swift packages

Image

새로운 보안 프로토콜인 TOFU(Trust On First Use)를 도입

  • package를 첫 다운로드 시 지문의 유효성을 검사하도록 변경
  • 보안과 신뢰 위해서라고 함

Command plug-ins

  • Swift Developer의 workflow를 개선하는 좋은 방법
  • 더 확장 가능하고, 안전한 빌드 도구를 제공
  • 문서 생성, 소스 코드 재 포맷 등에 사용할 수 있음
  • 쉘 스크립트로 자동화를 작성하고 별도의 워크 플로를 유지하는 대신 Swift를 사용 가능

Image

docC

  • Objective-C 지원
  • C 지원

Image

Image

  • 추가 빌드 단계를 구현할 수 있는 플러그인
  • 예) 소스코드 생성, 리소스 처리

ModuleAliases

Image

  • 동일한 이름으로 인한 모듈 충돌 해결

Image

  • 패키지를 통해 모듈의 이름을 변경할 수 있음

Package Plugins에 대한 자세한 세션은 아래 참고 Image
Meet Swift Package plugins
Create Swift Package plugins

Swift driver setting

  • Swift 소스코드의 컴파일을 제어
  • 별도 실행 대신 Xcode 빌드 시스템 내에서 사용할 수 있음
  • 빌드 시간 5~25% 개선

Swift driver setting 에 대한 자세한 세션은 아래 참고 Image
Demystify parallelization in Xcode builds

Performance improvements

Swift 표준 라이브러리가 더 작고 빨라짐

  • 이벤트 기반 서버 솔루션에서 장점

Image

제네릭 검사가 더 빨라짐

  • 병렬 빌드화(build parallelization)와 더 빠른 검사 덕분

그동안 프로토콜이 많으면 iOS에서 프로토콜 검사가 4초까지 걸렸는데 이를 캐시 함

  • Swift에 의존하는 경우 최대 2배까지 향상 가능

성능에 대한 자세한 세션은 아래 참고 Image
Improve app size and runtime performance

Concurrency model

Data race safety

Image
Image

Data race safety 에 대한 자세한 세션은 아래 참고 Image
Eliminate data races using Swift Concurrency

async/await/actor가 swift5에 복사된 번들 제공

  • 이를 통해 iOS 13 등 더 낮은 OS도 지원 가능
  • data race 안정성을 더욱 구체화함
  • actor는 우선순위가 높은 작업을 실행

Swift 5 가 ABI를 지원한다고 해서 가능한 듯?

distributed keyword

Image

  • 네트워크 상의 다른 시스템 액터
  • 백앤드를 위한 서버 측 분산 시스템 구축에 중점을 둠

distributed keyword에 대한 자세한 세션은 아래 참고 Image
Meet distributed actors in Swift

Async Algorithms package

Image

  • AsyncSequence - 비동기 스케쥴링 알고리즘을 위한 패키지
  • Apple, Linux, Windows 지원

Swift concurrency instruments

Image

  • Swift Tasks, Swift Actors를 통해 동시성 코드를 시각화
    • 작업의 수, 총 작업 등 통계 제공
    • 작업 간의 상속 관계에 대해 그래프 제공

Swift concurrency instruments에 대한 자세한 세션은 아래 참고 Image
Visualize and optimize Swift concurrency

Optional unwrapping

Image
Image

if let, guard 에 대한 변수 네이밍을 반복하지 않고 Optional Unwrapping 가능

while let workingDirectoryMailmapURL {
    print (workingDirectoryMailmapURL)
    break
}

Closure type inference

Closure에 대한 타입 추론이 향상됨

Image

String과 같은 복잡한 Closure의 return Type을 추론할 수 있음

let scores = [100, 80, 85]

let results = scores.map { score in
    if score >= 85 {
        return "\(score)%: Pass"
    } else {
        return "\(score)%: Fail"
    }
}

closure에 try를 사용할 수 있음

Image

Permitted pointer conversions

Image

  • Swift <-> C 간 허용 포인터 변환을 개선
  • Swift는 기존적으로 Type, Memory에 safety 함
    • 다른 Type의 pointer로 자동으로 변환되지 않음

Image
Image

  • C는 특정 포인터로의 변환을 허용(Swift와 다름)
    • 쉽게 전활 할 수 있도록 특별 처리

Image

  • Swift는 C API를 사용할 때 문제가 발생했었음
    • Swift는 function, method call에 대한 별도의 규직 집합이 있음
    • 일반적으로 Swift에는 없는 C에서 포인트 변환을 허용

Swift Regex

현재 문자열 구문 분석이 매우 어려움

Image

  • 인덱스를 접근하는 형태는 더 어려움

애플은 이런 문제에 대해 정규식으로 해결하는 것을 제안

Image

  • NSRegularExpression를 사용하고 있었음
  • 정규식을 만드는 가장 쉬운 방법은 정규식 리터럴을 사용하는 것
    • 정규식 리터럴은 complie tile에 검사를 제공함

NSRegularExpression도 읽기 어렵다면?

Image

  • RegexBuilder 통해 더 읽기 쉬운 코드 작성 가능
  • Swift 5.7에서는 구문이 훨씬 간결해 짐
    • SwiftUI와 매우 유사한 방식의 문법

@RegexComponentBuilder 제공

Image

  • 이를 통해 재사용한 Component를 작성 가능

Date에 대해서도 지원

Image

Swift Regex에 대한 자세한 세션은 아래 참고 Image

Generics

  • “only be used as a generic constraint” 오류를 swift 5.7에서 수정
  • 제네릭의 정의를 단순화

Image
Image
Image
Image

Protocol을 Type으로 사용하는 것에 대한 완화

let tvShow: [any Equatable] = ["Brooklyn", 99]

Generics 에 대한 자세한 세션은 아래 참고 Image
Embrace Swift generics
Design protocol interfaces in Swift

출처

What’s new in Swift

댓글남기기