Swift 4.2 日本語化計画 : Swift 4.2
ABI のダッシュボード
最終更新日:2018 年 9 月 24 日
Swift の現在の最優先事項の 1 つは、将来の Swift バージョン間との互換性です。これの主要な部分の 1 つは、ABI の安定性であり、これにより、異なるバージョンの Swift でコンパイルされたアプリケーションとライブラリ間のバイナリ互換が可能になります。Swift ABI マニフェスト は、ABI を安定させると宣言する前に完了しなければならないエンジニアリングと設計タスクについて説明しています。これらのタスクには、予想される変更、変更に発生する可能性のある、または影響を受けない可能性のある調査、およびドキュメントのタスクが含まれます。以下のダッシュボードは、これらのタスク*の進行状況を追跡します。
データレイアウト
タスク | バグ追跡 | 状況 |
---|---|---|
部分的に不透明な集合体のレイアウトを最適化 | SR-3722 | 変更の必要なし (1) |
利用可能情報を含む固定レイアウトア属性をサポート | SR-3911 | 変更の必要なし (2) |
構造体のレイアウトアルゴリズムを変更 | SR-7809 | 進行中 |
タプルのレイアウトアルゴリズムを変更 | SR-3726 | 変更の必要なし |
ペイロードされた列挙型 (enum) のレイアウトアルゴリズムを変更 | SR-3727 | 完了(まだリリースされず) |
参照カウント用のネイティブなオブジェクトヘッダー内にワードサイズのフィールドを使用 | SR-4353 | Swift 4.1 で完了 |
ARC 最適化用の参照でスペアビットの使用を探索 | SR-3728 | 変更の必要なし (3) |
実在するコンテナのバッファサイズの再評価 | SR-3340 | 変更の必要なし (4) |
参照カウントした copy-on-write の実在バッファーの使用 | SR-4330 | Swift 4.0 で完了 |
実在のパラメータからプロトコルに制約された汎用パラメータへの変換を評価 | SR-4331 | 変更の必要なし (5) |
レイアウトアルゴリズムの技術仕様を作成 | SR-3730 |
(1) この最適化は、非弾力の汎用構造体にのみ有効であり、後でレイアウトバージョン管理方式で実装することができます。
(2) これは、不透明な型が固定レイアウトを持つように変更されたときの将来のリリースまでは不要です。
(3) この提案の複雑さとコードサイズのオーバーヘッドは、特に関数シグネチャの最適化がモジュール内の呼び出しに同じ利点を提供するため、潜在的なパフォーマンスの向上を上回るように決定されました。
4) インラインバッファを 2 ワードに縮小するかどうかについて同意がなかったので、現状を 3 ワードバッファで維持することに決めました。
(5) これは大きな変化であり、Swift 5 の範囲外です。
メタデータ型
タスク | バグ追跡 | 状況 |
---|---|---|
メタデータ型の進化を計画 (将来の機能のための領域を切り出し、重要な領域を凍結することを含む) | SR-3923 | Swift 4.2 で完了 |
メタデータ表現の履歴アーティファクトを一掃 | SR-3924 | Swift 4.2 で完了 |
将来の特徴 (反映など) のためにメタデータにより多くのセマンティック情報を増やす | SR-3925 | 変更の必要なし (6) |
すべての言語構成のメタデータレイアウトの固定部分の技術仕様 | SR-3731 | |
名前付き値型のメタデータに格納されている名前の切り分けを決定 | SR-3926 | Swift 4.2 で完了 |
目撃テーブルを介して enum 分別機と対話する効率を確認 | SR-4332 | Swift 4.1 で完了 |
値目撃テーブルのレイアウトをロック | SR-3927 | Swift 4.1 で完了 |
ライブラリの発展に対してどのクラスのメタデータが不透明であるかを立証 | SR-4343 | 完了(まだリリースされず) |
テーブルのレイアウトをロックするか、または思考を使用するか | SR-3928 | 完了(まだリリースされず) |
プロトコル目撃テーブルのレイアウトをロック | SR-3732 | Swift 4.2 で完了 |
プロトコル記述子を含む実在型のメタデータのレイアウトを決定 | SR-4341 | Swift 4.1 で完了 |
関数パラメータの既存のタプル設計を更新することを検討 | SR-4333 | Swift 4.2 で完了 |
(6) 完全反射のサポートは、ABI の安定性に先立つ目標ではありません。後でもっとセマンティックな情報を追加できます (SR-3923)。
切り分け
タスク | バグ追跡 | 状況 |
---|---|---|
順序に依存しない切り分け用の汎用およびプロトコル要件の標準化を定義 | SR-3733 | Swift 4.1 で完了 |
関数パラメータの切り分けの多様性を確認 | SR-3734 | Swift 4.0 で完了 |
構造体と列挙型を切り分けシンボルで区別しないように考慮 | SR-3930 | 変更の必要なし (7) |
不必要な内部目撃テーブルシンボルを削除 | SR-3931 | 変更の必要なし |
名前の重複を減らすための単語置換のオーバーホール | SR-4344 | Swift 4.0 で完了 |
返らない関数用の既知のオーバーロードセットに基づいて切り分けを調査 | SR-3933 | 変更の必要なし (8) |
共通の接頭部を最大にするための型/準拠 情報の再編集 | SR-3932 | Swift 4.0 で完了 |
(7) これは実装が難しく、よりコンパクトな切り分けを生成しません。
(8) これは破壊的な変化であり、Swift 4.0 での切り分けの変更後、シンボル名は十分に短く、これを追求する予定はありません。
呼び出し規約
タスク | バグ追跡 | 状況 |
---|---|---|
新しい Swift 呼び出し規約を採用 | SR-4346 | Swift 4.0 で完了 |
関数シグネチャ低下スキームを文書化 | SR-4349 | |
戻り値を保持するレジスタの数を決定 | SR-3946 | Swift 4.0 で完了 |
部分的に不透明なレイアウトで値を分割するかどうかを調査 | SR-3947 | 変更の必要なし (9) |
(9) これは非常に複雑ですが、パフォーマンスはほんのわずかに向上するに過ぎません。私たちは非公開の関数のために後でそれを行うことを検討します。
実行時
タスク | バグ追跡 | 状況 |
---|---|---|
望ましさと動作のためのすべての実行時関数の監査 | SR-3735 | Swift 4.1 で完了 |
標準ライブラリ
タスク | バグ追跡 | 状況 |
---|---|---|
String を再設計 | SR-4354 | Swift 4.2 で完了 |
プロトコル指向の整数 | SR-3196 | Swift 4.0 で完了 |
シーケンスとコレクションに適切な制約を強制 | SR-3453 | Swift 4.1 で完了 |
条件準拠を使用してさまざまなコレクションラッパーを折りたたむ | SR-3458 | Swift 4.1 で完了 |
所有権
タスク | バグ追跡 | 状況 |
---|---|---|
デフォルトでパラメータを "guaranteed" に渡すための規約の変更 | SR-7100 | Swift 4.2 で完了 |
コルーチンを実装して、堅牢な inout 変更に使用できるようにする | SR-7134 | 完了(まだリリースされず) |
一般化したアクセサを実装し、標準ライブラリに採用 | SR-7135 | |
リリースビルドでの排他的メモリアクセスの実施のサポート | SR-7139 | |
ジェネレータを実装し、それらを標準ライブラリで採用する | SR-7140 | 変更の必要なし (10) |
移動専用型の概念の実証を実装して、標準ライブラリが移動専用データをサポートできることを確認 | SR-7141 | 変更の必要なし (10) |
(10) ジェネレータと移動専用型は Swift 5 の対象外です。これらの機能は後で ABI 互換の方法で追加できますが、ライブラリのサポートにより複雑さが増す可能性があります。
*注:進行状況が増えるにつれて、タスクが追加される可能性があります。