2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Swift 5.7の変更点つまみ食い

Posted at

言語と標準ライブラリ

Swift 5.7では、言語と標準ライブラリに多くの改良が施されています。

  • if let構文や複数のクロージャ構文における型アノテーションなど、一般的な定型文で利用できる新しい省略記法。
  • 言語仕様上の制限を解除することによって、ジェネリックプログラミングの親和性を改善。
  • 新しいアノテーションとオプトイン診断により、データ競合の安全性が強化されました。
  • 分散環境におけるアクター分離。
  • 既存のポインタAPI群の使い勝手を改善。
  • 文字列処理のための全く新しい言語サポートとAPI。

ジェネリクスの改善された実装

ジェネリクスを扱いやすくする言語仕様の改良に加えて、型検査のジェネリクス実装が完全に書き直され、正確さとパフォーマンスが改善されました。

新しい実装では、多くのバグが修正されました。
コレクションのSubSequence関連型に対する同一型要件のような複雑な同一型要件の処理と、Self.Element == Selfという要件を定義するCaseIterableプロトコルを使用したコードに関連するものです。

ジェネリクスの新しい実装によって、パフォーマンスも向上しました。
プロトコルと関連型の特定の構成で、型検査の時間はSwift 5.6では指数関数的なスケールしていましたが、Swift 5.7では線形になりました。

自動参照カウントの改善

Swift 5.7では、最適化が許可されているときに変数の寿命を短くするための新しいルールを指定することによって、ARCの動作はより予測可能で、ユーザーフレンドリーで、パフォーマンスも良くなっています。
ルールを強制するために、コンパイラは「各変数の語彙的スコープ」を追跡する新しい内部表現を採用しました。
これには、既存の最適化の更新に加えて、いくつかの最適化を新たに実装する必要がありました。
拡張された変数寿命に依存する最も一般的なプログラミングパターンが、プログラマが明示的に withExtendedLifetime()を使用しなくても安全に実行できるようになりました。
これにより、最適化されたビルドでは実行時に発生する「診断が困難なライフタイムバグ」から保護されます。
また、既存のソースを壊すことなく、より強力な最適化を導入することも可能です。

コード補完

関数呼び出しの引数、変数、およびグローバル関数のコード補完が、Swiftの型チェッカーに緊密に統合されました。
これにより、コード補完は曖昧なコードやエラーのあるコード内部でより正確な結果を提供できます。

以下は、 + の後を補完する場合の例です。
コード補完は、周囲のコンテキストに一致するものとして intstring を提案します。
エディタは、これらの提案結果を array よりも上位にランク付けすることができるようになりました。

func makeIntOrString() -> Int {}
func makeIntOrString() -> String {}

let array = [4, 2]
let int = 42
let string = "Hello World!"
makeIntOrString() +

次の例は、欠けている引数を補完する場合です。
最初の引数は「整数の 1」なので、コード補完は secondInt 引数ラベルのみを提案します。
secondStringは省略されるようになりました。

func add(_ firstInt: Int, secondInt: Int) {}
func add(_ firstString: String, secondString: String) {}
add(1, )

引用元: Swift.org Swift 5.7 Released!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?