先日のswift-evolutionメーリングリストで発表されたSwift ABI Stability Manifestoは,SwiftのABIが安定したと宣言する前に取り組む必要のあるすべての懸念のまとめ上げを目的としたものだ。
ABI安定化の目標にはおもに2つの部分がある,と同書を著したAppleの技術者であるMichael Ilseman氏は書いている。
- 実行ファイルにバンドルされ,実行時にロードされる公開フレームワークのAPIに関する,Swfitコンパイラによる標準化された記述表現を含むモジュールファイルの定義。
- 関数呼び出し方法やメモリ上のデータやメタデータの表現といった,さまざまな低レベルの詳細に影響を与えるような一連のコンベンションに関する定義。
その中でIlseman氏は,特に開発の必要な6つの領域を指摘している。
- データレイアウト –
struct
とclass
のインスタンスのメモリ配置方法の定義。 - 型メタデータ – 特別なメモリレイアウト,あるいはクエリAPIが必要である。
- 名前の符号化 – 型や関数などの外部シンボルを,コンパイラがユニークに識別する方法の定義。
- 関数の呼び出し規則 – 関数との引数受け渡しをどのように行なうか,どのレジスタを退避するか,などの定義。
- Swiftランタイム – 動的キャストや参照カウント,リフレクションなどの基本的なメカニズムを提供するという意味で,ABIの一部である。
- 標準ライブラリ – アプリやライブラリが呼び出すものであるため,そのAPIはABIの一部である。
ABI安定化はSwift 4の最優先機能のひとつであり,サードパーティのフレームワーク開発者にとって非常に重要なものだ。InfoQが報告しているように,ABIをロックダウンする前に定義の必要な言語仕様の一部を定義できなかったことを理由に,Swift 3でのABI安定化は見送られていた。先日のAccidental Techポッドキャストとのインタビューで,Swiftを開発した元Appleの技術者であるChris Lattner氏は,ABI安定化はアプリ開発者にはそれほど重要ではないかも知れないが“Appleにとっては非常に重要”であり,組織におけるSwift採用の鍵になるものだ,と語っている。
Swiftチーム自身には,SwiftがApple内での全面的な採用を勝ち取る前に達成する,という明確な目標があります。ABI安定化はフレームワーク開発者が,例えば,Swiftの採用を躊躇する最大の要因です。本当に重要なものなのです。常に最優先である理由のひとつがそこにあります。
実際には,Swift 4 ABIが安定したと宣言されるかどうかは,まだ明らかになっていない。この事実は,ABI安定化に必要な作業量が膨大であることに加えて,Swiftコミュニティにとっては必ずしも最重要な課題ではないという事実によるものだろう,とLatter氏は述べている。
ある時点で,Swift 4でABI安定化を達成するよりそちらの方が重要だという決定が下されたとしても,意外ではありません。
コミュニティにとっての優先事項としてLatter氏が指摘するのは,コンパイラの信頼性向上,エラーメッセージの改善,コンパイル時間のスピードアップ,より大規模なプロジェクトへのSwiftのスケールアップなどだ。
この記事を評価
- 編集者評
- 編集長アクション