この記事の要点
- Swift 5.0 の目標・リリースプロセス・想定スケジュールを示した記事です。
- Swift 5.0 の主目標は、言語の ABI 安定化を達成することです。これにより OS ベンダーが安定した Swift ランタイムを OS に同梱でき、実行ファイルやライブラリがそれにリンクできるようになります。
- ABI 安定化に関連して、module stability も重点項目です。これは Swift 5.0 か、あるいはその後の 5.x リリースのいずれかで、準備が整い次第導入されるとされました。
- Swift 5.0 はこれまでの Swift リリースとはバイナリ互換ではありません。ただし、これ以降の Swift リリースは Swift 5 とバイナリ互換になります。
- ソース互換性は高く保たれますが、Swift 3 互換モードは Swift 5 コンパイラでは廃止されます。Swift 4.2 が Swift 3 モードをサポートする最後のリリースです。
masterからswift-5.0-branchへの最終マージは 2018 年 11 月 16 日で、それ以降は厳選された重要な修正のみがリリースに入ります。
リリース計画の概要
Swift 5.0 の位置づけ
Swift 5.0 の主たる目標は、言語が ABI 安定化を達成することです。ABI(Application Binary Interface)が安定すると、OS ベンダーが安定した Swift ランタイムを OS に同梱でき、実行ファイルやライブラリがそのランタイムにリンクできるようになります。これは、アプリのバイナリに Swift ランタイムを同梱する必要をなくす上で重要な前提となります。
ABI 安定化に関連して、module stability も重点項目とされました。module stability は、異なるコンパイラでビルドされたモジュールを安定して利用できるようにするための取り組みで、Swift 5.0 リリース、あるいはその後の 5.x リリースのいずれかで、準備状況に応じて導入されるとされました。
バイナリ互換性
Swift 5.0 はこれまでの Swift リリースとはバイナリ互換ではありません。バイナリ互換性とは、異なる Swift コンパイラでコンパイルされた Swift コードが互いにリンクし、ランタイムレベルで相互運用できることを指します。
一方で重要なのは、これ以降の Swift リリースは Swift 5 とバイナリ互換になるという点です。つまり Swift 5.0 が、バイナリ互換性が保たれる起点となります。
ソース互換性
Swift 4.2 と同様、Swift 4.2 コンパイラでビルドできたソースの大半は、Swift 5.0 コンパイラでもコンパイルできるはずです。
ただし、Swift 3 互換モードは Swift 5 コンパイラではサポートされません。Swift 3 モードをサポートする最後のリリースは Swift 4.2 です。Swift 3 以降のリリースでは、言語の表層と実装の内部の両面で重要な変更が行われており、それらが将来にわたって持続するソース安定性・バイナリ安定性の基盤となります。
スナップショットによる提供
Swift 5.0 リリースブランチのダウンロード可能なスナップショットは、継続的インテグレーション(CI)テストの一部として定期的に公開されます。Swift 5.0 のリリース後は、スナップショットに加えて公式の最終ビルドも公開されます。
スケジュールとブランチ運用
swift-5.0-branch には Swift 5.0 でリリースされる変更が含まれ、次のように運用されます。
- 直近:
swift-5.0-branchがmasterから最初に分岐済みです。 - 最終ブランチ作成日まで、定期的に
masterがswift-5.0-branchにマージされます。 - 2018 年 11 月 16 日(最終ブランチ作成):
masterからswift-5.0-branchへの最後のマージが行われます。それ以降は「bake(熟成)」期間として、厳選された重要な修正のみがプルリクエストを通じてリリースに入ります。
この計画には 5 つの注目すべき例外があります。swift-package-manager・swift-llbuild・swift-corelibs-foundation・swift-corelibs-xctest・swift-corelibs-libdispatch は master から swift-5.0-branch へ毎日マージされ、これらの変更の最終締め切りは 11 月 16 日より後になり、後日告知されるとされました。一部のプロジェクトの締め切りは次のとおりです。
| プロジェクト | 締め切り |
|---|---|
| swift | 2018 年 11 月 20 日 |
| swift-package-manager | 2019 年 2 月 11 日 |
| swift-llbuild | 2019 年 2 月 11 日 |
Swift 5.0 のブランチ運用は複数のリポジトリにまたがり、swift・swift-clang・swift-cmark・swift-compiler-rt・swift-corelibs-foundation・swift-corelibs-libdispatch・swift-corelibs-xctest・swift-integration-tests・swift-llbuild・swift-lldb・swift-llvm・swift-syntax・swift-package-manager・swift-xcode-playground-support が swift-5.0-branch を持ちます。
リリースマネージャ
リリース全体は次の担当者が統括し、リリースが収束するにつれて変更管理が厳格化される時点を告知します。
- Ted Kremenek: Swift 5.0 全体のリリースマネージャ
- Duncan Exon Smith: swift-llvm・swift-clang・swift-compiler-rt のリリースマネージャ
- Fred Riss: swift-lldb のリリースマネージャ
- Ben Cohen: Swift 標準ライブラリのリリースマネージャ
- Tony Parker: swift-corelibs-foundation のリリースマネージャ
- Pierre Habouzit: swift-corelibs-libdispatch のリリースマネージャ
- Brian Croom: swift-corelibs-xctest のリリースマネージャ
- Rick Ballard: swift-package-manager のリリースマネージャ
- Daniel Dunbar: swift-llbuild のリリースマネージャ
なお、当時案内されていた開発フォーラム(development forum)は現在の Swift Forums に置き換えられています。リリース管理プロセスについての質問は、フォーラムへの投稿や Ted Kremenek への連絡が案内されました。
参加・確認すべきポイント
Swift 5.0 に変更を取り込む流れ
- すべての言語・API の変更は Swift Evolution プロセスを経ます。どの変更がリリースのスコープに入るかの基準もそこに文書化されます。
- それ以外の変更(バグ修正、診断の改善、SourceKit のインターフェイス改善など)は、リスクと影響に基づいて受け入れられます。
- リリースの品質確認に役立つ場合は、リスクの低いテストの微調整もリリースブランチに遅い段階で受け入れられます。
- リリースが収束するにつれて、取り込み基準は徐々に厳しくなります。
プルリクエストに添える情報
最終再ブランチ後にリリースブランチへの取り込みを提案するプルリクエストには、次の情報を含めます。
- Explanation(説明): 修正する問題や行う拡張の説明。簡潔でよいが明確であること。
- Scope(影響範囲): 変更の影響・重要度の評価。たとえばソース互換性を壊す言語変更かどうかなど。
- SR Issue: 対応する bugs.swift.org の SR 番号(該当する場合)。
- Risk(リスク): その変更を取り込むことでリリースに生じる具体的なリスク。
- Testing(テスト): 影響を検証するために実施済み、または必要なテスト。
影響を受けるコンポーネントのコードオーナーがレビューを行います。技術レビューはコードオーナーが委任することも、必要に応じて依頼することもできます。master から自動的にマージされる変更を除き、swift-5.0-branch に入るすべての変更は、対応するリリースマネージャが受け入れるプルリクエストを経る必要があります。