1

C、C++、および Objective-C では、実行可能ファイルの一部を独自の「オブジェクト ファイル」にコンパイルし、「ヘッダー ファイル」を含めることで他のコードからそれ (および/または複数のオブジェクト ファイルを含むライブラリ) を使用できます。高度にテンプレート化された C++ コードにもかかわらず、「ヘッダー」には通常、呼び出しコードの正確性を検証するために必要な宣言のみが含まれます (また、IDE をオートコンプリートなどで支援します)。

しかし、Swift にはヘッダー ファイルがありません。

現在、明らかに Swift の静的ライブラリを作成することは現在不可能ですが、将来、Swift にヘッダーがないことを考えると、「新しい」ソース コードから既存のプリコンパイル済みコードを使用したいという上記のような状況はどのように機能するのでしょうか?

コンパイラが適切に使用されていることを確認するために、コンパイルされたフォームを十分に内省できる [私が推測する] Java がどのように機能する必要があるかのように機能しますか? 中間表現に加えてビットコードは、そのようなメタデータを保持するために必要な「プロトコル」も提供しますか?

Apple が Cocoa を Swift に移植する (そしてクローズド ソースのままにする) 場合、Swift アプリにどのように「インポート」するのでしょうか?

実際には、この質問は「クローズドソース」自体とは何の関係もありませんが、Swiftのコンパイル単位の境界を理解しようとしています。Go 言語に関する同様の質問に基づいて、ここでの私の質問は次のように言い換えることができます: ソースなしでコンパイル済みの Swift ライブラリにリンクできますか?

4

2 に答える 2

1

Apple の Swift ライブラリについて考えてみましょう。それらはクローズドソースであり、問​​題なく使用でき、コンパイラーのライブラリーにあるものの疑似「ヘッダー」を確認できます。これがどのように機能するかの正確なメカニズムは現在公式に文書化されていませんが、存在する必要があります。

于 2015-06-23T22:47:30.723 に答える
0

@user102008 に加えて、良いニュースは、Swift が今年末までにオープンソース化され、さらに Apple によって Linux に移植されることです。常にそのように機能することを保証することはできませんが (Apple はこの種の問題については記録が乏しいため)、Apple がそうすることに関心がなくても、人々はこの中で適切な解決策を見つけるでしょう.

さらに、私の知る限り、Swift オブジェクトは実際には Objective-C オブジェクトでした。Swift を動作させるには、Objective-C とそれほど違いはありません。(詳細: http://www.eswick.com/2014/06/inside-swift/ ) コンパイル後、クラス ダンプを実行する (または IDA などのデバッガーにロードする) だけで、簡単に作成できます。 .h を追加して、通常の静的ライブラリまたはフレームワークのように機能させます。

于 2015-06-23T23:01:23.253 に答える