
Swift 6.4 がリリース — ビルドシステムから WebAssembly まで拡張

Swift 6.4 が 9 月 15 日にリリースされた。Swift Package Manager の Swift Build がデフォルト化され、Subprocess が 1.0 に到達。C++20 および Java との相互運用性が向上し、WebAssembly のパフォーマンスが最大 40 倍高速化された。Embedded Swift はより機能が充実し、メモリセーフな新配列型とプロトコルにより安全性とパフォーマンスが両立する。
本リリースは、アプリ・サーバー・システムコード・組み込みデバイス・ブラウザに至る、スタック全体での Swift の利用を拡張するものである。「Swift aims to be a great choice across the stack, from apps and servers to systems code, embedded devices, and the browser. This release deepens that support, and makes everyday code easier to write.」
ビルドシステムと基盤機能
Swift Package Manager では Swift Build がデフォルトとなった。Subprocess は 1.0 に到達し、安定したクロスプラットフォームの相互動作機構として他プログラムの実行と対話が可能になった。
Swift SDK は Swift.org から直接利用できるようになり、LLDB はデバッグビルドにおいて曖昧な名前ベースの参照ではなく、精密な依存関係追跡を通じてモジュールをインポートするようになった。Linux と Windows のデバッグビルドおよび Darwin 上の dSYM バンドルは大幅に縮小される。
Swift Package Manager は SPDX または CycloneDX 形式のソフトウェア部品表 (SBOM) 生成機能を新たに備えた。VS Code 拡張機能は Open VSX Registry で利用可能となり、Swiftly との統合が含まれている。
相互運用性の強化
Swift の Span は C++20 の std::span と直接ブリッジされる。Swift/Java 相互運用は async および callback サポート、プロトコルとコールバック ラッパー、クロージャの自動 Runnable マッピング、可変長パラメータインポート、Java レコード型対応を含む形で拡張された。
WebAssembly では、JavaScriptKit を通じたブリッジが最大 40 倍高速化された。Swift SDK は新 LTS NDK 30 で構築され、SwiftPM は Android をサポートするようになった。Android ランタイムライブラリには可用性属性が提供される。
Embedded Swift と メモリセーフティ
Embedded Swift は existential 型と richer error handling (any Error を含む) をサポートするようになった。EmbeddedRestrictions 警告はターゲット全体で有効化可能である。Span と InlineArray プロパティに borrow および mutate アクセッサが追加された。
非copyable 型は Equatable、Comparable、Hashable に適合でき、Ref と MutableRef は単一値の borrowing または mutation 用のコンテナを提供する。Optionals of non-copyable types は consuming なしに検査・更新が可能である。
- UniqueBox: ヒープ値を参照カウント不要で一意に所有するスマートポインタ
- RigidArray: 非copyable 要素用の固定容量バッファ
- UniqueArray: 非copyable 要素用の動的成長バッファ
- withTemporaryAllocation: 自動初期化・クリーンアップされるスクラッチバッファ
Iterable プロトコルは Sequence を超える拡張をもたらし、RawSpan の variants は unsafe フラグ関数に代わる新しい safe loading API を備える。
言語とコンパイラの改善
Optional some および any 型はもはや括弧ラッピングが不要である。@diagnose 属性はコンパイラ警告のソースレベル制御を提供する。Module selectors (::) を使用すると、複数モジュールが同じ API 名を定義する場合、どのモジュールの API かを指定できる。
Async 関数は defer ブロック内での呼び出しが可能になり、withTaskCancellationShield API により囲むタスク取り消しからシールドされたコード実行が実現できる。例として「flushMetrics is a network call, so it can suspend after cancellation is requested; the shield ensures it runs to completion and isn't included in cancellation.」と説明されている。
ProgressManager は async/await サポートを獲得し、@Observable 型は細粒度かつ継続的な変更通知を備えるようになった。
Swift は標準ライブラリのオープンソースドキュメンテーションを備えたドキュメンテーションサイトを新たに提供する。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
Swift.org「Swift 6.4 Released」https://www.swift.org/blog/swift-6.4-released/