web-dev-qa-db-ja.com

異なる言語のプログラムは、ファイルioなしで情報を伝達できますか?

たとえば、int配列をファイルに書き込まずにJavaプログラムに渡すC++プログラムを作成することは可能ですか?

質問の動機:what matlabとは何か、そしてそれがいくつかの異なる言語で書かれたアプリケーションになった理由(異なる言語で利用可能、つまり、同じ機能を含むC++、Javaなどのバージョンがあります)。

2
Minh Tran

はい。一般的な答えは、それらはある種の共有バイナリインターフェイスを持っているということです。通常、事実上のCAPIです。少し単純化すると、これは、Cで記述された関数を呼び出す言語Aで関数を記述し、次にCで記述された関数が言語Bで記述された関数を呼び出すことを意味します。いくつかの有用な例:

  • Luaは、Cコードに埋め込まれるように設計されたスクリプト言語です。最も有名なユースケースは、エンジンがCで記述されているが、すべての高レベルのものがLuaでスクリプト化されているビデオゲームです。

  • 一部の言語(Java、Pythonなどを含む)には、C関数を呼び出すことのみを目的とした特別なFFI(外部関数インターフェイス)ライブラリが含まれています。

  • 他の人が指摘しているように、ほとんどすべてのIPC(プロセス間通信)メカニズムとネットワーク通信プロトコルは言語に依存しません。それらはすべて、任意の一連のバイトを送信することを中心に展開し、受信者に任せます。それらのバイトの意味。

明確な情報を見つけることができませんが、インターネット上のランダムな人々は、MATLABのUIがJavaで記述されており、IPC C++で書かれたインタプリタ。

3
Ixrec

はい。各プロセスは、IPCまたはプロセス間通信と呼ばれるものを使用して別のプロセスと通信できます(当然のことながら!)。 IPCにはさまざまな形式があり、ファイルIOはかなりの数のUNIXプログラムで使用されていますが、ソケット、名前付きパイプ、メモリマップ、またはデータベース(何かを使用)を使用できます。黒板のアーキテクチャパターンの線に沿って)。

プロセスの作成に使用される言語は関係ありません(同じIPCメカニズム)にアクセスするためのサポートを除いて)。

3
gbjbaanb

書く価値のあるほぼすべての言語には、Cダイナミックライブラリとインターフェイスする何らかの方法があります。 Javaでは、Java Native Interfaceを使用するか、ある種のスクリプトエンジンのようにメモリ内でJVMをホストすることによって行われます。

Matlabには、Javaと同様のセットアップがあります。

Cから Engine engine = engopen(NULL); を呼び出し、engineを使用して、COMサービスまたは一連のパイプを使用してmatlabプロセスにコマンドを送信します。

3
ratchet freak