Swift Digest
Blog | Swift.org Blog

Swift 6.3 リリース

Swift 6.3 Released

このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら

この記事の要点

主な変更点

言語と標準ライブラリ

C 相互運用: @c 属性

Swift 6.3 では、Swift の関数や enum を C のコードへ公開する @c 属性が導入されました。関数に @c を付けると、生成される C ヘッダ(compatibility header)に対応する宣言が含まれ、C / C++ のコードからそのまま呼び出せます。

@c
func callFromC() { ... }
// 生成される C ヘッダ

void callFromC(void);

C 側で使う名前を明示的に指定することもできます。

@c(MyLibrary_callFromC)
func callFromC() { ... }

さらに @c@implementation と組み合わせられます。C ヘッダ側に宣言した関数の実装を Swift で書く、という使い方です。この場合 Swift はヘッダに新しい宣言を生成するのではなく、Swift の関数が既存の C 宣言と一致しているかを検証します。

// C ヘッダ

void callFromC(void);
// 実装は Swift で記述

@c @implementation
func callFromC() { ... }

module selector による名前解決の明示

同名の API を提供する複数のモジュールを import していると、どちらの API なのか曖昧になることがあります。Swift 6.3 では、どのモジュールの API を使うかを明示する module selector(モジュール名::名前)が導入されました。

import ModuleA
import ModuleB

let x = ModuleA::getValue() // ModuleA の getValue を呼ぶ
let y = ModuleB::getValue() // ModuleB の getValue を呼ぶ

Swift というモジュール名を使って、並行処理や文字列処理ライブラリの API を明示的に参照することもできます。

let task = Swift::Task {
  // 非同期処理
}

ライブラリ API 向けの最適化コントロール

ライブラリ作者が、利用側に対するコンパイラ最適化をより細かく制御できる属性が追加されました。

パッケージとビルドの改善

Swift 6.3 には、Swift Package Manager に統合された Swift Build のプレビュー が含まれます。全対応プラットフォームで統一されたビルドエンジンを使えるようになり、クロスプラットフォーム開発の一貫性が高まります。自分のパッケージで試して、問題があれば報告することが推奨されています。

そのほかの Swift Package Manager の改善は次のとおりです。

コアライブラリ

Swift Testing

Swift Testing には次の改善が入りました。いずれも対応するProposalダイジェストがあります。

DocC

DocC には 3 つの実験的機能が追加されました。

プラットフォームと実行環境

Embedded Swift

Embedded Swift は、C 相互運用の強化やデバッグ支援の改善から、完全なリンクモデルに向けた前進まで、幅広く改善されました。詳細は元記事からリンクされている「Embedded Swift Improvements coming in Swift 6.3」を参照してください。

Android

Swift 6.3 には、Swift SDK for Android の初の公式リリース が含まれます。この SDK を使うと、Swift でネイティブの Android プログラムを開発したり、自分の Swift パッケージを Android 向けビルドに対応させたりできます。また Swift Java / Swift Java JNI Core を使って、Kotlin / Java で書かれた既存の Android アプリへ Swift コードを組み込むこともできます。長年の草の根のコミュニティ活動の上に Android Workgroup が積み重ねた成果であり、Swift のクロスプラットフォーム開発に新たな可能性を開く大きな節目です。

Swift 利用者への影響

関連 Proposal・リンク