Swift Digest
Blog | Swift.org Blog

Swift 5.7 リリース

Swift 5.7 Released!

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

この記事の要点

主な変更点

言語と標準ライブラリ

if let の省略記法(SE-0345

既存のオプショナル変数を同じ名前でアンラップする際、if let foo = foo のように名前を繰り返す必要がありました。Swift 5.7 では右辺を省略して書けます。

if let foo {
  // foo はアンラップ済み
}

文字列処理(Regex)

Swift 5.7 では、正規表現を中心とした新しい文字列処理機能が言語・標準ライブラリの両面から追加されました。型としての RegexSE-0350)、宣言的に正規表現を組み立てる Regex builder DSL(SE-0351)、正規表現リテラル(SE-0354)、正規表現を活用した文字列処理アルゴリズム(SE-0357)などです。

let regex = /(\d+)-(\d+)/
if let match = "12-34".firstMatch(of: regex) {
  print(match.1, match.2) // 12 34
}

ジェネリックプログラミングの制約緩和

長年の制約が解消され、ジェネリックなコードがより自然に書けるようになりました。

並行処理

開発体験

ジェネリクスの新実装

型チェッカのジェネリクス実装が一から書き直され、正確性と性能が向上しました。特に複雑な same-type 要件(コレクションの SubSequence への制約や、Self.Element == Self を要求する CaseIterable を使うコードなど)にまつわる長年のバグが多数修正されました。性能面でも、特定のプロトコル・associated type 構成で Swift 5.6 では指数的にかかっていた型チェック時間が、Swift 5.7 では線形になっています。

ARC の改善

Swift 5.7 では、最適化が許される場面で変数の寿命を短くする新しい規則が導入され、ARC の挙動がより予測しやすく、性能も向上しました。これにより、変数の寿命延長に依存する一般的なパターンの多くで withExtendedLifetime() を明示的に使わずに済むようになり、最適化ビルドの実行時にだけ現れる診断しづらい寿命バグから保護されます。

コード補完

関数呼び出しの引数・変数・グローバル関数のコード補完が型チェッカと密に統合され、曖昧なコードやエラーを含むコードでもより正確な候補を返すようになりました。

エコシステム

Swift 利用者への影響

関連リンク