遅くとも私は、異なる言語で書かれたアプリケーションがお互いの関数/サブルーチンを呼び出せると聞いていました。今まで、私はそれが非常に自然であると感じました - すべて、そう、すべて - それは私が考えていたことです、愚かな私! - 言語は機械コードにコンパイルされ、すべての言語で同じでなければなりません。私は、IL、バイトコードなど、互いに上位のマシンコードでコンパイルされた言語であっても、実際にはアプリケーションが相互に作用することを認識しました。私は何度も答えを見つけようとしましたが、失敗しました - 答えは私を満足させませんでした - 彼らは私がコンパイラや全く同意しなかったもの、そして他のものを知っていたと推測しました。これがどのように機能するかを理解しやすい。特に、「純粋な」マシンコードにコンパイルされた言語が「呼び出し規約」とは異なるものを持っていることが、私の髪をくすぐるものです。異なる言語で書かれたさまざまなアプリはどのように相互作用しますか?
0
A
答えて
0
これは実際には非常に広いトピックです。機械コードにコンパイルされた言語は、通常は労力を要することなく、お互いのルーチンを呼び出すことができます。例えば、C++正しく宣言時にCルーチンを呼び出すことができますコード:C++が明示的にCとの互換性のために設計されたため、
// declare the C function foo so it can be called by C++ code
extern "C" {
void foo(int, char *);
}
これは、それを取得と同じくらい簡単ですが(それは同様にCからC++ルーチンを呼び出すためのサポートが含まれています) 。
共通の呼び出し規約を共有していない限り、1つのコンパイラでコンパイルされたCルーチンは別のコンパイラでコンパイルされたCから呼び出すことができないという点で、実際には複雑です。別の逆の順序でi
とj
の値を押すかもしれないが、例えば、あるコンパイラは、(擬似アセンブリ)
PUSH the value of i on the stack
PUSH the value of j on the stack
JUMP into foo
に
foo(i, j);
をコンパイルしたり、レジスタに置きます。 foo
が別の規則に従ってコンパイラによってコンパイルされた場合、スタックから引数をフェッチして間違った順序で取得しようとすると、予期しない動作が発生する可能性があります。
一部のコンパイラでは、この目的でさまざまな呼び出し規約がサポートされています。 Wikipedia articleには呼び出し規約が導入されています。詳細については、コンパイラのドキュメントを参照してください。
最後に、同じアドレス空間でバイトコードでコンパイルされた言語と解釈された言語と低レベルのものを混在させることはさらに複雑です。高水準言語の実装には、通常、低レベル(CまたはC++)コードでそれらを拡張するための独自の規則が用意されています。たとえば、JavaはJNIとJNAです。
関連する問題
- 1. iOSアプリをさまざまな言語のFlashでローカライズするにはどうすればよいですか?
- 2. さまざまな種類のプロセッサ用にアセンブリ言語がどのように異なっていますか?
- 3. アプリ全体をさまざまな言語にローカライズするにはどうすればよいですか?
- 4. さまざまな言語の異なる時間にAndroidマーケットにアプリのアップグレードをリリースできますか?
- 5. さまざまな言語のiPhoneアプリをローカライズするにはどうすればいいですか?
- 6. さまざまな言語で書かれたプログラム間のデータ交換
- 7. さまざまな言語のパフォーマンスを比較するにはどうすればよいですか?
- 8. ActiveMQで使用されるさまざまなメッセージングプロトコルの相互運用性
- 9. さまざまなタスクに異なるスレッドを使用するにはどうすればよいですか?
- 10. ActiveInboxのようなプログラムはどの言語で書かれていますか?
- 11. Visual Studioでさまざまな言語のテーマが異なります。コード
- 12. さまざまなプログラミング言語で書かれたライブラリのパフォーマンステストを行う方法は?
- 13. PHP設定ファイルでさまざまな言語を扱うにはどうすればいいですか?
- 14. さまざまな言語のJplagによる剽窃
- 15. C#では、フィールドイニシャライザとオブジェクトイニシャライザはどのように相互作用しますか?
- 16. 南アフリカはさまざまなアプリでどのような移行順序を採用していますか?
- 17. さまざまな言語での難読化コードの使用
- 18. ポインタはあらかじめ定義された構造とどのように相互作用しますか?
- 19. buffer [100] = {0、}を使用した初期化はどのようにC言語で動作しますか? C言語で書かれたプログラムのロードデータ部に
- 20. 言語の厳密なスーパーセットで書かれたプログラムは多言語としてカウントされますか?
- 21. さまざまな向きの言語を扱うための優れたリソースやアドバイスはありますか? (日本語や中国語など)
- 22. Apache Cordovaとイオンフレームワークはどのようにネイティブに相互作用しますか?
- 23. iPhone:アプリの設定でさまざまな言語設定を追加するにはどうすればよいですか?
- 24. さまざまなバージョンのiOS用にアプリアイコンを作成するにはどうすればよいですか?
- 25. Railsでさまざまなアプリの設定をテストするにはどうすればよいですか?
- 26. Windowsサービス同士の相互作用はどのようにできますか?
- 27. LevenshteinモジュールはNodeJSモジュールシステムとどのように相互作用しますか?
- 28. Qt:QGuiApplicationとQQmlApplicationEngineはどのように相互作用しますか?
- 29. モーダルビューコントローラと子ビューコントローラはどのように相互作用しますか?
- 30. スパークはレッドシフトとどのように相互作用しますか?
thanx多く...私はそれを理解していると思うが、私はちょうどそう思う...多分私は他の疑問を持っているだろう... とはい...正確に私たちはすべて 'プログラムの - 私は低レベルの意味で...私は何度もこのフレーズを見て、それが意味するものを正確に作ることができなかった... –
もう一つのこと...どのようにコンピュータは2つのオブジェクト - 私たちはより高いレベルのオブジェクトでオブジェクトを使用するようになりますが、コンパイルされた言語では0と1になります... n番目のビットがオブジェクトAの終わりであることをコンパイラがどのように知っていますか?単純に2つの整数をどうやって分離することができますか?すべてのメモリが特定の順序で配置されたビットのストリームであるとしたら、右か? –
@ParthThakkar:クラッシュすると、プログラムが突然機能しなくなります。あなたの2番目の質問については、それは一般的に説明することはかなり不可能です。あなたはC++に精通していますか? –