2

デスクトップ ソフトウェアのさまざまなコンポーネントをさまざまな言語でプログラムできますか? たとえば、MultiProg というソフトウェアは Comp1、Comp2、Comp3 などのコンポーネントで構成されています。1、2、3 を除くすべてのコンポーネントは Java にあり、1 は C、2 は Python、3 は Scala などにあります。これを行う必要があるのはいつですか?

これはソフトウェア業界で一般的に見られますか? コンポーネントが異なる言語で書かれている場合、どのようにコンポーネントを通信させるのでしょうか?

4

5 に答える 5

2

それは確かにできます。通常、ある種の接着層 (パイプ、ソケット、ファイル監視、共有メモリ、プロトコル バッファなど) を使用して、さまざまなプロセスが互いに通信/呼び出しできるようにします。

于 2013-03-31T03:22:32.840 に答える
2

それは確かに珍しいことではありません。

Python 標準ライブラリの多くの部分は C で記述されており、numpy などの多くの一般的なサードパーティ ライブラリには C で記述された部分があり、ctypes を使用して独自の C ライブラリへのバインドを作成できます。Python のデフォルト GUI ライブラリ Tkinter の一部は、Tcl/Tk で記述されています。

Java には Java Native Interface (JNI) があり、Java 仮想マシンではなく物理マシンを対象として記述されたモジュールを統合するために使用できます。Scala は JVM 用に作成されたライブラリ (もちろん Java で作成されたものも含む) を使用でき、JNI も使用できます。

ほとんどの大規模なソフトウェアは、複数の言語で記述されています。通常は 2 つの言語が使用されます。1 つはパフォーマンス クリティカル セクション用の高速なコンパイル済み言語 (通常は C または C++) で、もう 1 つは複雑だがパフォーマンス クリティカルではない部分を記述するためのスクリプト言語 (Python、Lisp、Lua など) です。

どの言語でも対話できるようにするには、2 つの要件があります。1 つは、相互に理解できる形式でメモリ内データを共有できる必要があること、2 つ目は、共通の「呼び出し規約」を使用して互いの関数を呼び出せる必要があることです。ネイティブ インターフェイス ライブラリは、これらの問題を解決します。

于 2013-03-31T03:38:58.177 に答える
1

もちろん。コンポーネントが異なれば、機能も異なります。また、IPC (プロセス間通信) を使用してデータを交換します。Linuxでは一般的です。IPC の詳細については、こちら ( http://en.wikipedia.org/wiki/Inter-process_communication ) を参照してください。

于 2013-03-31T03:21:14.080 に答える