Swift 6.4 출시: Swift Build 기본 적용과 상호운용성·메모리 안전성 개선
Swift 6.4 Released
핵심 요약
- Swift Package Manager의 기본 빌드 시스템이 Swift Build로 바뀌어 Linux, macOS, Windows에서 같은 방식으로 프로젝트를 빌드할 수 있다.
- Subprocess 1.0, C++20 std::span 연동, Java 상호운용성 확장과 WebAssembly 브리징 성능 개선이 포함돼 Swift의 플랫폼 지원 범위가 넓어졌다.
- UniqueArray와 Iterable 등 복사 없는 데이터 처리 기능이 추가됐고, 비동기 정리 작업과 테스트·디버깅 도구도 개선됐다.
도입
Swift 6.4는 빌드 시스템, 언어 기능, 플랫폼 상호운용성, 메모리 처리와 개발 도구를 함께 업데이트했다. Swift Package Manager는 Swift Build를 기본으로 사용하며, Subprocess는 안정 버전 1.0에 도달했다. C++, Java, WebAssembly, Android, Embedded Swift 지원도 확장됐다. 언어에는 비동기 정리 작업과 취소 보호 기능이 더해졌다.
상세 요약
빌드와 개발 도구
Swift 6.4에서 Swift Package Manager(SwiftPM)는 Swift Build를 기본 빌드 플랫폼으로 사용한다. 이에 따라 Linux, macOS, Windows에서 프로젝트를 같은 빌드 시스템으로 처리할 수 있다. SwiftPM은 SPDX 또는 CycloneDX 형식의 Software Bill of Materials(SBOM) 문서 생성도 지원한다.
디버그 정보에서 Swift 모듈을 추적하는 방식도 바뀌었다. LLDB는 모듈 이름만으로 모호하게 찾는 대신 정확한 의존성 정보를 사용해 모듈을 가져온다. 바이너리 Swift 모듈을 디버그 산출물에 포함하지 않으므로 Linux와 Windows의 디버그 빌드, Darwin의 dSYM 번들 크기도 줄어든다. Swift용 VS Code 확장은 Open VSX Registry에 제공되며 Cursor, Antigravity, Kiro 등에서도 사용할 수 있다. Swiftly 연동으로 프로젝트에 사용할 툴체인 버전도 선택할 수 있다.
언어와 라이브러리
some과 any를 사용하는 옵셔널 타입은 괄호 없이 쓸 수 있다. @diagnose 속성으로 소스 코드에서 컴파일러 경고 동작을 제어하고, 모듈 선택자 ::로 같은 이름을 제공하는 여러 모듈 중 사용할 API를 지정할 수 있다. defer 블록에서는 비동기 코드를 실행하고 종료 전에 완료를 기다린다. withTaskCancellationShield는 바깥 작업이 취소돼도 지정한 클로저가 끝까지 실행되도록 한다.
Foundation과 표준 라이브러리도 개선됐다. ProgressManager에는 async/await 지원 API가 추가됐고, @Observable 타입은 세밀하고 연속적인 변경 알림을 제공한다. Subprocess는 Swift 동시성을 기반으로 다른 프로그램을 실행하고 상호작용하는 크로스플랫폼 패키지로, 1.0 안정 버전에 도달했다. Swift Testing 테스트에서 XCTAssert를, XCTest에서 #expect를 사용할 수 있으며, 실패한 기대식의 표시 내용을 CustomTestReflectable로 조정할 수 있다. swift test는 테스트 케이스 반복 실행과 Apple 플랫폼에서 Transferable 첨부 파일 기록도 지원한다.
플랫폼 상호운용성
C에서는 @implementation과 @c를 함께 사용해 별도 C 선언 없이 Swift 함수로 헤더의 구현을 제공할 수 있다. Swift의 Span을 사용한 안전한 래퍼도 만들 수 있다. C++20의 std::span은 Swift Span과 직접 연결돼 경계에서 수동 변환하지 않아도 된다. Swift/Java 상호운용성은 프로토콜 및 콜백 래퍼에서 비동기·throwing 함수 호출을 지원하고, 클로저의 Runnable 자동 매핑, 가변 인자 가져오기, Java record 타입 지원을 추가했다.
WebAssembly에서는 JavaScriptKit의 안전한 브리징이 기존 동적 브리징보다 최대 40배 빨라졌다. Wasm SDK는 Swift.org의 설치 페이지에서 제공돼 SDK를 추가하는 것 외에 별도 설정 없이 브라우저용 Swift를 컴파일할 수 있다. Foundation은 WASI에서 FileManager 지원을 개선했다. Android용 Swift SDK는 LTS NDK 30 기반이며, 기본 NDK를 사용하는 Swift 런타임 라이브러리와 패키지에 Android availability 속성을 제공한다. Swift Build는 SwiftPM에서 Android도 지원해 사후 설치 스크립트가 필요하지 않다. Embedded Swift에는 existential 타입과 오류 처리 지원이 추가되고, 타깃 전체에 적용할 수 있는 EmbeddedRestrictions 경고가 도입됐다.
복사 없는 메모리 처리
Span과 InlineArray는 borrow 및 mutate 접근자를 통해 프로퍼티로 읽거나 갱신할 수 있다. 비복사 타입은 Equatable, Comparable, Hashable을 준수할 수 있고, Ref와 MutableRef는 값을 하나씩 빌려 읽거나 수정하는 저장 가능한 컨테이너를 제공한다. 비복사 타입의 Optional 내부 값도 소비하지 않고 검사하거나 갱신할 수 있다.
UniqueBox는 참조 카운팅 없이 힙 값을 독점 소유하며 비복사 값도 담을 수 있다. UniqueArray는 비복사 요소를 저장하고 버퍼를 동적으로 확장한다. Iterable 프로토콜을 사용하면 요소를 복사하지 않고 반복하면서 빌릴 수 있다. withTemporaryAllocation은 자동 초기화와 정리를 제공하는 임시 버퍼를 만들고, RawSpan 계열의 새 안전 로딩 API는 안전하지 않은 표시가 붙은 기존 함수 대신 바이트를 읽고 쓸 수 있게 한다.
Swift 6.4의 변경 사항을 정리한 Swift 생태계 주요 소식에서도 이번 출시와 관련 도구 업데이트를 확인할 수 있다.
결론
이번 버전은 여러 플랫폼에서 빌드와 디버깅 환경을 정리하는 동시에, 다른 언어 및 런타임과 Swift를 연결하는 기능을 보강한다. 비복사 타입을 컬렉션과 프로토콜에서 다루는 범위도 넓어졌다. Swift 6.4의 핵심 변화는 새 기능의 추가뿐 아니라 기존 프로젝트의 빌드·테스트·상호운용 작업에 적용할 수 있는 구체적인 API와 도구 개선에 있다.