Appleは、オープンソースのプログラミング言語の最新版「Swift 6」を公開した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Appleは2024年9月17日(米国時間)、オープンソースのプログラミング言語の最新版となる「Swift 6」を公開した。
Swiftは、静的型付けができる言語であり、Appleの「iOS」「macOS」「watchOS」「tvOS」でローカルに動くアプリケーションの構築に向いている。さらに、クロスプラットフォーム対応により、サーバーサイドやApple以外のプラットフォーム向けアプリケーション開発にも利用できる。
Swift 6の主な変更点は次の通り。
新たなオプトインの言語モードが追加され、並行処理コード内の潜在的なデータ競合がコンパイルエラーとして検出するようになった(非対応コードはビルドできなくなる)。並行処理コードにおけるデータ競合を防ぐことが可能となり、安全性が向上した。
関数のシグネチャにおいて、関数がスローするエラーの型指定に対応した。関数がスローするエラーの処理が容易になり、メモリの割り当てができないリソース制約のある組み込みSwiftコードで役に立つという。
func parseRecord(from string: String) throws(ParseError) -> Record { // ... }
do { let record = try parseRecord(from: myString) } catch { // 'error' has type 'ParseError' }
Swift 5.9で導入された非コピー型(non-copytable types、~Copyable構文で指定できる)をジェネリクス機能に統合し、コピー可能な通常の型と非コピー型の両方を同じ関数やデータ構造内で扱うことが可能になった。
protocol Drinkable: ~Copyable { consuming func use() } struct Coffee: Drinkable, ~Copyable { /* ... */ } struct Water: Drinkable { /* ... */ } func drink(item: consuming some Drinkable & ~Copyable) { item.use() } drink(item: Coffee()) drink(item: Water())
Swift 6では、switch文で非コピー型を扱う際にコピーを避けることが可能となり、パフォーマンスが向上した。またOptionalやResultといった標準ライブラリも非コピー型をサポートしている。
Swift 5.9で導入されたC++ interoperability(C++との相互運用性)により、既存のC++プロジェクトにSwiftを統合できるようになった。Swift 6では、相互運用性が強化され、以下の機能をサポートするようになった。
コピーコンストラクタを持たないC++型は、Swift 6から非コピー型としてアクセスできるようになった。
マイクロコントローラーのプログラミングなど、組み込みソフトウェア開発に適した言語サブセットおよびコンパイルモードである「Embedded Swift(組み込みSwift)」のプレビューが追加された。
128bit整数型がサポートされた。全てのSwiftプラットフォームで使用できる。
Swiftをサポートする全てのプラットフォームでFoundationライブラリの実装が統一され、ライブラリの一貫性が強化された。JSONDecoder、URL、Calendar、FileManager、ProcessInfoなど、多くのFoundationのコア型が再実装されている。
macOSやiOSのみで利用可能だったAPI(FormatStyle、ParseStrategy、Predicate、JSON5)が、Swiftをサポートする全てのプラットフォームで利用可能となり、Swift 6でFoundationに追加されたExpressionなどの新しいAPIもLinuxやWindowsからアクセスできる。
新しいテストライブラリとしてSwift Testingが導入された。テストの作成と整理を容易にするAPIなどを提供し、#expectのようなマクロを使用して、テストが失敗した場合の詳細を出力できるようになった。異なる引数でテストを簡単に繰り返す機能により、大規模なコードベースにも拡張可能だ。
@Test("Continents mentioned in videos", arguments: [ "A Beach", "By the Lake", "Camping in the Woods" ]) func mentionedContinents(videoName: String) async throws { let videoLibrary = try await VideoLibrary() let video = try #require(await videoLibrary.video(named: videoName)) #expect(video.mentionedContinents.count <= 3) }
Swift Testingは、Swift 6ツールチェーンに統合されているため、パッケージの依存関係を宣言せずに利用できる。Foundation実装と同様、Swiftが公式にサポートしているApple、Linux、Windowsをサポートしている。
Swift 6では「Static Linux SDK」をサポートし、静的リンクされたLinuxバイナリのビルドが可能になった。これにより、どのLinuxディストリビューションでも実行できるLinuxバイナリをビルドし、直接システムやコンテナ上にコピーして実行させることができる。Static Linux SDKは、Swiftがサポートする全てのプラットフォームからLinuxにクロスコンパイルするためにも使用できる。
DebianとFedoraおよびUbuntu 24.04でのサポートとテストが追加された。
arm64アーキテクチャ用のビルドツールチェーンが利用可能になり、Armホスト上のWindowsのコンパイラパフォーマンスが向上した。
Swift 6のSwiftパッケージマネジャーは、デフォルトでWindows上の複数コアにまたがってビルドを並列化する。10コアのマシンでは、ビルドのパフォーマンスを10分の1まで向上できる。
その他、デバッグ時のパフォーマンス改善など複数の機能の追加や改善が行われている。
Copyright © ITmedia, Inc. All Rights Reserved.