Appleは9月15日(現地時間)、Swift 6.2を正式にリリースしました(公式ブログ)。
今回のアップデートは、すべてのSwift開発者の生産性を向上させることを目的としたもので、言語仕様からツール、ライブラリ、デバッグ機能まで幅広く強化されています。
より自然な並行処理(Concurrency)の実現
より自然で安全な並行処理(Concurrency)の実現のため、以下のような変更が行われています。
-
メインスレッドでの実行が簡単に:
@MainActor
の明示なしでメインスレッドにコードを隔離可能。 -
直感的なasync関数:非同期関数が呼び出し元のコンテキストで実行されるようになり、データ競合の心配が減少。
-
@concurrent属性の導入:並行処理を明示的に指定でき、コードの意図がより明確に。
// In '-default-isolation MainActor' mode
struct Image {
// The image cache is safe because it's protected
// by the main actor.
static var cachedImage: [URL: Image] = [:]
static func create(from url: URL) async throws -> Image {
if let image = cachedImage[url] {
return image
}
let image = try await fetchImage(at: url)
cachedImage[url] = image
return image
}
// Fetch the data from the given URL and decode it.
// This is performed on the concurrent thread pool to
// keep the main actor free while decoding large images.
@concurrent
static func fetchImage(at url: URL) async throws -> Image {
let (data, _) = try await URLSession.shared.data(from: url)
return await decode(data: data)
}
}
安全なシステムプログラミング
予測可能なパフォーマンスを最小限のオーバーヘッドで実現する、安全なシステムプログラミングのための機能も導入されています。InlineArray は、要素をインラインで格納する新しい固定サイズ配列で、スタック上に追加のヒープ割り当てなしに直接格納できます。インライン配列は、要素の前に角括弧で囲んだサイズを記述するか、次の省略形構文を使用して導入できます:
struct Game { // Shorthand for InlineArray<40, Sprite> var bricks: [40 of Sprite] init(_ brickSprite: Sprite) { bricks = .init(repeating: brickSprite) } }
ポインタの代替として、安全かつ高速なメモリアクセスを提供するSpan型や、セキュリティ重視のプロジェクト向けに、危険なコード使用を警告する厳密なメモリ安全性をオプトインで導入することもできます。
開発ワークフローの改善も
その他、VS Code拡張機能の強化や、警告制御の精密化、マクロビルドの高速化なども行われています。テストとライブラリの改良も行われています。
-
Subprocessパッケージ:非同期対応の外部プロセス管理API。
-
Foundationの通知API刷新:型安全な通知構造体でエラーを防止。
-
Observationの強化:UI更新の冗長性を排除し、パフォーマンス向上。
-
Swift Testingの新機能:終了条件テストや添付ファイルによる詳細な失敗分析が可能。
さらに、Wasm(WebAssembly)への対応が追加され、ブラウザやサーバー向けのアプリケーション開発が可能になりました。
まとめ
Swift 6.2は、より安全で効率的な開発体験を提供するためさまざまな改良が行われています。iOSやiPadOS、macOSアプリを開発している方は要チェックです。