任意の関数または関数呼び出しに追加できるもの (注釈、リフレクション、定義、またはまったく異なるものなど) が必要です。
f
この何かが追加されたすべての関数について、特定の関数t
を のパラメータで呼び出す必要がありますf
。
関数t
は、ネットワークを介して他のプログラムにパラメーターを送信する必要があります。
このようなことをする方法はありますか?
任意の関数または関数呼び出しに追加できるもの (注釈、リフレクション、定義、またはまったく異なるものなど) が必要です。
f
この何かが追加されたすべての関数について、特定の関数t
を のパラメータで呼び出す必要がありますf
。
関数t
は、ネットワークを介して他のプログラムにパラメーターを送信する必要があります。
このようなことをする方法はありますか?
この背後にある一般的な原則は と呼ばれmarshalling
、関数のパラメーターは、他のコンピューターに送信できるようにラップされます。送信者はパラメータをマーシャリングし、受信者はアンマーシャリングします。どちらも型を理解している必要があり、さまざまなコンピューター アーキテクチャと一貫した方法でそれを行う必要があります。
リモート プロシージャ コール (RPC) は、あるコンピューターから別のコンピューターに関数呼び出しを送信する 1 つの方法であり、背後でマーシャリングが必要です。
Victor が指摘したように、XMLRPC はそれを行う 1 つの方法であり、マーシャリングは XML 経由で行われます。他にもたくさんのパッケージがあり、RPC とマーシャリングをグーグル検索すると、より多くの可能性が得られるはずですが、XMLRPC はまさにあなたが望むものかもしれません。
CORBA と DCOM は関連するメカニズムです。コンピューター間で関数呼び出しを送信するというアイデアは、分散システムの主要な概念の 1 つです。そのため、もう少し詳しく見てみると、特定の問題に対する非常に簡単な解決策があるかもしれません。
これには Google Protocol Buffers を使用できます: https://developers.google.com/protocol-buffers/docs/overview
これは、使いやすく移植可能なシリアライゼーション ライブラリです。さらに、Python、Java などのさまざまな言語で、C++ コードと「対話」できる (C++ コードによってシリアル化されたオブジェクトを逆シリアル化する) プログラムを作成できるようになります。これは、テストを容易にする場合などに非常に役立ちます。 .
リモート マシンで関数を呼び出すだけの場合は、XMLRPCライブラリが最適です。XML RPC 仕様を使用してパラメーターをマーシャリングするためのコードを生成します。
Linux/BSD 環境の場合は、'man rpcgen' を実行します。DCE/CORBA よりも分散アプリケーションを構築する方が簡単であることがわかりました。
何をしようとしているのか、「プロセス間関数呼び出し」または IFC という名前を付けましょう。
私は、アプリに組み込まれたリアルタイムのブラウザー ベースの可視性を備えたスケーラブルなクラウド アプリを生成するための IFC コンパイラ (ifcc) に取り組んできました。
プロトタイプ コンパイラが動作しています。フレームワークの可視性部分も機能していますが、インストルメント化されたコードを生成するためのコンパイラにはまだ統合されていません。
Ifcc は入力として C インクルード ファイルを受け取り、.h ファイル内の関数プロトタイプ宣言に基づいて、マーシャリング用の C ソース コードを生成し、異種環境での使用に適したクライアントおよびサーバーのプロキシ/スタブを生成します (バイト順を処理します)。 /ビッグエンディアン/リトルエンディアン) 環境。
ところで、ifcc は賢いコンパイラです。配列、typedef、ネストされた構造などを処理するだけでなく、任意のポインターの追跡も行います。たとえば、二重リンク リストへのポインタを指定して関数を呼び出すと、パッケージ化されて送信され、受信側で二重リンク リストが再作成されます。
人々がそれで遊ぶことに興味がある場合は、システムの「uname -a」の出力と、使用しているコンパイラをコメントに追加してください。多くの関心があれば、開発者が学習/遊び/実験できるようにします。