Swift Digest
Blog | Swift.org Blog

Swift 5.8 リリース

Swift 5.8 Released!

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

この記事の要点

主な変更点

言語と標準ライブラリ

upcoming feature flag による段階的な機能導入(SE-0362

Swift 6 では一部の機能がデフォルトの挙動になりますが、それらをいきなり全部有効にすると既存コードへの影響が大きくなります。Swift 5.8 では、こうした upcoming feature を 1 つずつ前倒しで有効化し、Swift 6 への移行を段階的に進められるようになりました。

upcoming feature はデフォルトでは無効です。有効にするには、コンパイラフラグ -enable-upcoming-feature に機能の識別子を渡します。

-enable-upcoming-feature ConciseMagicFile

ソースコード側では #if hasFeature(機能識別子) で機能の有無を判定できるため、その機能に未対応の古いツールでもコンパイルを通せます。

#if hasFeature(ConciseMagicFile)
// 新しい挙動を前提としたコード
#else
// 従来の挙動を前提としたコード
#endif

Swift 5.8 では、次の Swift Evolution Proposal が upcoming feature として用意されています。

conditional attributes(SE-0367

複数の Swift ツールバージョンに対応するライブラリでは、新しい属性が古いコンパイラで使えず、保守コストがかさみがちでした。Swift 5.8 では宣言に付ける属性を #if で囲めるようになり、さらに、現在の言語モードのコンパイラがある属性をサポートしているかを判定する hasAttribute(属性名) ディレクティブが加わりました。

#if hasAttribute(preconcurrency)
@preconcurrency
#endif
protocol P: Sendable { ... }

その他の言語・標準ライブラリの拡張

開発体験

result builder の実装刷新

result builder の実装が書き直され、コンパイル時間・コード補完・診断が大きく改善されました。新しい実装は、Swift 5.7 で導入された複数文クロージャの型推論(SE-0326)を活用し、result builder の変換を Proposal(SE-0289)の仕様どおりに、複数文クロージャと同じ形で型チェックします。これにより、特に不正なコードでの型チェック性能とエラーメッセージが改善されました。

一方で、新実装は SE-0289 のセマンティクスに沿ったより厳密な型推論を行うため、これまで不正な型推論に依存していた一部の既存コードに影響します。

エコシステム

Swift-DocC

Swift Package Manager

SwiftSyntax

Swift 5.8 に合わせた SwiftSyntax では、パーサが C++ に依存せず完全に Swift で書き直されました。コンパイラ本体は当面は従来の C++ パーサを使い続けますが、最終的にはこの新パーサへの置き換えを目指しています。新パーサには次の利点があります。

Windows プラットフォーム

Windows ツールチェインの段階的な改善が続いています。DEVELOPER_DIR 環境変数への依存の解消、ICU の静的リンク化によるファイル数と依存の削減、Windows での C++ 相互運用に向けた初期作業、vcruntime モジュールの visualc への改称、Swift Package Manager のパス処理の堅牢化、SourceKit-LSP の安定性向上などが含まれます。

Swift 利用者への影響

関連 Proposal・リンク