Swift Digest
Blog | Swift.org Blog

Swift 5.2 リリース

Swift 5.2 Released!

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

この記事の要点

主な変更点

言語の更新

Swift 5.2 では、Swift Evolution プロセスを経た次の 2 つの言語 Proposal が実装されました。

コンパイラ診断の改善

Swift コンパイラのエラーメッセージの品質と精度が大きく改善されました。

従来は、式を部分式に分割し、それぞれを個別に調べてエラー箇所を推測していました。この方式は単純なケースでは機能しますが、親の式の情報を使わないと正しく特定できない種類の誤りには対応できませんでした。

Swift 5.2 では、型推論の途中で遭遇した個々の失敗を記録しておき、その情報から正確な診断を生成します。多くの場合、修正方法(Fix-It)も提示されます。

たとえば、存在しない enum のケースと比較するコードを考えます。

enum E { case one, two }

func check(e: E) {
  if e != .three {
    print("okay")
  }
}

Swift 5.1 では、次のような分かりにくいメッセージが出ていました。

error: binary operator '!=' cannot be applied to operands of type 'E' and '_'

Swift 5.2 では、問題が即座に分かるメッセージになります。

error: type 'E' has no member 'three'

新しい診断アーキテクチャの詳細は 新しい診断アーキテクチャの概要 を参照してください。

コード補完の改善

ビルドアルゴリズムの改善

Swift コンパイラには、Release ビルドで主に使われる Whole Module モードと、Debug ビルドで主に使われる Incremental モードの 2 つの動作モードがあります。Incremental モードは、変更されたファイルだけを並列にコンパイルできる点で開発時に有利ですが、宣言がソースファイルをまたいで参照し合うため、複数のコンパイルタスクで型チェックが重複し、効率が落ちることがありました。

Swift 5.2 のコンパイラ(特に型チェッカ)では、request(自己完結した計算の単位)の間でのキャッシュ・遅延評価・依存追跡を担う新しい中央集権的なロジックが導入されました。これにより宣言とその参照をより効率的に解決できます。

従来は、別のソースファイルから宣言が参照されると、後で必要になるかもしれないプロパティを先回りで計算する validation という粗い処理が走り、無駄が生じていました。Swift 5.2 では、コンパイラ内部の宣言の表現がイミュータブルになり、コード生成フェーズが必要に応じて request を遅延評価し、その結果をキャッシュします。request は従来の validation より細粒度なため、無駄な作業を避けて性能が向上し、加えて型チェッカが想定外の検証を要求される際の正しさの問題も多数修正されました。

さらに、名前付きシンボルを宣言へ解決する name lookup など基盤コンポーネントの最適化により、Whole Module / Incremental の両モードでビルド時間の改善が期待できます。これらは name lookup の各種アルゴリズムの計算量(big-O)を下げるため、ソースファイルが多い大規模プロジェクトで特に効果があります。

デバッガの改善

Swift デバッグがサポートされる全プラットフォームで、LLDB がデバッグ情報から Swift の型情報を再構築する能力が向上し、より多くの型情報を扱えるようになりました。

特に LLDB は、Clang モジュールをソースからコンパイルする代わりに、DWARF デバッグ情報から C / Objective-C の型を取り込めるようになりました。この挙動は symbols.use-swift-dwarfimporter という LLDB 設定で制御でき、従来の Clang モジュール取り込みが失敗した場合のフォールバックとしてデフォルトで有効です。これにより、複数の動的ライブラリで検索パスが衝突するなどの理由で Clang モジュールの取り込みが失敗するケースでも、変数ビューや式評価が機能しやすくなります。

Swift Package Manager

Swift Package Manager には次の改善が入りました。

ツールの改善

ドキュメントとプラットフォーム

Swift 5.2 に対応した『The Swift Programming Language』の更新版が Swift.org で公開され、Apple Books でも無料で入手できます。Linux 向けには Ubuntu 18.04 / 16.04 の公式バイナリが提供され、Apple プラットフォーム向けには Xcode 11.4 に同梱されます。ツールチェインは Swift.org からも入手できます。

Swift 利用者への影響

関連リンク