この記事の要点
- Swift 3.0 が正式リリースされました。これはオープンソース化以降で初めてのメジャーリリースで、コア言語と標準ライブラリの大規模な改善・洗練、Linux 版の大幅な機能拡充、そして Swift Package Manager の初の公式リリースを含みます。
- Swift 3 は Swift 2.2 / 2.3 とソース互換ではありません。Swift Evolution プロセスを経た非常に多くの言語変更が入っており、特に SE-0005 と SE-0006 による命名規則と Objective-C API 取り込みの刷新が広範に影響します。
- Apple プラットフォーム向けには Xcode 8.0 に同梱され、Linux(Ubuntu 14.04 / 15.10)向けには Swift Core Libraries と Swift Package Manager を含む公式バイナリが提供されます。
主な変更点
言語変更
Swift 3.0 はメジャーな言語リリースであり、Swift Evolution プロセスを経た多数の言語変更を含みます。主なテーマごとに整理すると次のとおりです。完全な一覧は元記事を参照してください。
- API 設計ガイドラインの全面適用: API 設計ガイドライン自体の策定(SE-0023)、標準ライブラリへの適用(SE-0006)、それに伴う Set API の書き直し(SE-0059)など、命名規則を中心とした大規模な見直しが入りました。
- Objective-C API の取り込み刷新: Objective-C API をより自然な Swift として取り込む変換(SE-0005)、定数の型としての取り込み(SE-0033)、メンバーとしての取り込み(SE-0044)、軽量ジェネリクスの取り込み(SE-0057)、
idをAnyとして取り込む変更(SE-0116)、NSErrorブリッジの改善(SE-0112)などが入りました。 - 古い構文の削除: カリー化された
func宣言構文(SE-0002)、関数パラメータのvar(SE-0003)とlet(SE-0053)、++/--演算子(SE-0004)、条件式・加算式を伴う C スタイルのforループ(SE-0007)、暗黙のタプル展開(SE-0029)、@noreturn属性(SE-0102、空のNever型を導入)などが削除されました。 - 型システムと構文の改善:
ImplicitlyUnwrappedOptional型の廃止(SE-0054)、UnsafePointerのヌル許容性をOptionalで明示(SE-0055)、ジェネリックな型エイリアス(SE-0048)、関数型の引数を必ず括弧で囲む構文への統一(SE-0066)、コレクションとインデックスの新しいモデル(SE-0065)、protocol<P1,P2>をP1 & P2構文へ置き換え(SE-0095)、エスケープしないクロージャをデフォルト化(SE-0103)などが入りました。 - アクセス制御・命名の調整: スコープ付きアクセスレベル(
fileprivateなど)の導入(SE-0025)、OSXの別名としてのmacOSの追加(SE-0106)、sizeofなどをMemoryLayout構造体に統合(SE-0101)などが入りました。 - Swift Package Manager 関連: C 言語ターゲットのサポート(SE-0038)、システムモジュール検索パス(SE-0063)、コマンド名の整理(SE-0085)、Swift バージョンによるパッケージの差し分け(SE-0135)など、Package Manager 自体の Proposal も多数実装されました。
Migrating to Swift 3
Swift 3 はソース破壊的(source-breaking)なリリースで、その大部分は SE-0005 と SE-0006 によるものです。これらは標準ライブラリ API の名前だけでなく、Objective-C API(特に Cocoa)の Swift への取り込み方自体を大きく変えます。変更の多くは機械的なものですが、一般的な Swift プロジェクトでは数が多くなりがちです。
移行を助けるため、Xcode 8.0 には多くのソース変更を自動で処理できるコードマイグレータが含まれます。また、機械的ではなく個別の確認が必要な変更を案内する移行ガイドも用意されています。
ドキュメント
Swift 3.0 に対応した『The Swift Programming Language』の更新版が Swift.org で公開され、Apple の iBooks ストアでも無料で入手できます。
プラットフォーム
- Apple(Xcode): Apple プラットフォーム向けの開発では、Swift 3.0 は Xcode 8.0 の一部として提供されます。
- Linux(Ubuntu 14.04 / 15.10): Linux 版に Swift Core Libraries と Swift Package Manager が含まれるようになりました。Ubuntu 14.04 / 15.10 向けの公式バイナリがダウンロードできます。
Swift 利用者への影響
- 既存コードには移行作業が必要です。 Swift 3 は Swift 2.2 / 2.3 とソース互換ではありません。特に SE-0005 / SE-0006 による命名と Objective-C API 取り込みの変更が広範に効くため、Xcode 8.0 のコードマイグレータと公式の移行ガイドを活用して移行します。
- API がより一貫し Swift らしくなります。 API 設計ガイドラインの適用と Objective-C API の取り込み刷新により、標準ライブラリやインポートした API の命名が統一的になり、エスケープしないクロージャのデフォルト化や
MemoryLayoutへの整理など、書き心地が改善します。 - Apple プラットフォーム以外への展開が本格化します。 Linux 版に Core Libraries と Swift Package Manager が含まれるようになり、Package Manager の初の公式リリースと合わせて、サーバーサイドやクロスプラットフォームでの Swift 利用が現実的になりました。
関連リンク
- このリリースの計画と管理方針については Swift 3.0 のリリースプロセス を参照してください。
swift-3.0-branchは、将来のバグ修正向け「ドット」リリースに備えて引き続き開かれた状態に保たれました。 - 正式版に先立つプレビュー版については Swift 3.0 Preview 1 リリース を参照してください。
- Swift 3 の API 変革の背景については 近日公開: Swift API の大変革 と Swift 3 のAPI設計ガイドライン を参照してください。
- 本記事で触れた主な Proposal ダイジェスト: SE-0005 / SE-0006 / SE-0023
- Swift のダウンロード
- Swift Package Manager