2

Java、PHP、または Python でアプリケーション フレームワークまたは Web サイトを作成するプログラミング手法にときどき出会いますが、複雑なアルゴリズムが必要な場合は、それらを C または C++ で記述し、Java/PHP 内で API のような関数呼び出しとして実行します。 /Python コード。

私はこれについてネットでグーグルで検索してきましたが、その練習の名前を知らない限り、何も見つけられないようです.

簡単に言えば、どうすればいいですか:

  1. C または C++ で関数またはクラスを作成する
  2. それらをDLL/バイナリ/何らかの形式にコンパイルします
  3. から機能を実行します -
    • ジャワ
    • PHP
    • パイソン
  4. データを簡単にブリッジできるように、JSON/XML のような出力と入力を Java/PHP/Python と C/C++ 関数の間に作成する必要があると思いますが、それで問題ありません。

この手法にどのようにアプローチすればよいかはわかりませんが、Java、PHP、および Python の優れた機能を利用すると同時に、非常に高速なプログラミング言語を大規模で複雑なタスクに利用するための非常にスマートな方法のように思えます。 .

もう 1 つの考えは、Java/PHP/Python でリテラルのみを使用して関数を作成している場合、とにかく C とほぼ同じ速度で動作するかということです。

私が C/C++ で作業しようとしている特定のタスクは、大規模なループ、データベースへの ping、およびマップの分析です。作業はまだ開始されておらず、現在はすべての理論です。

4

4 に答える 4

4

Boost.Python を使用してカスタム C++ コードで Python スクリプトを簡単に拡張できます。詳細については、次の Web サイトを参照してください: http://www.boost.org/doc/libs/1_50_0/libs/python/doc/

これはあなたがそれを使用する方法です:

char const* greet()
{
   return "hello, world";
}

#include <boost/python.hpp>

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

これを共有ライブラリにコンパイルする必要があります。Windows では .dll を取得し、Linux では .so を取得します。ライブラリには、Python で使用できるようにするために必要なコードが含まれます。使用例:

>>> import hello_ext
>>> print hello_ext.greet()
hello, world

いくつかの例を次に示します: http://www.boost.org/doc/libs/1_50_0/libs/python/doc/tutorial/doc/html/index.html

Boost.Python を使用する場合、弱い動的リンクを使用していない場合は、共有オブジェクトを Python にリンクすることを忘れないでください。PHP と Java にも似たようなものがあります。

他の言語に関しては、Java でカスタム共有ライブラリを使用したことはありませんが、PHP で使用したことがあり、ネイティブ Api を使用するのは面倒でした。swig wayを使うとより快適であることがわかりました。

于 2012-08-19T18:39:19.247 に答える
0

Javaの場合、JNI(Java Native Interface)を検索できます。その使用方法を説明するガイドがたくさんあります。

于 2012-08-20T07:25:45.077 に答える
0

私はコメントに同意しますが(あなたは楽しみのためにそれをするかもしれませんが、ビジネスのためにそれは悪い考えです)、あなたはこの同様の質問に興味があるかもしれません. 上記のSWIG フレームワークは、あなたが言及したすべての言語をサポートしています。私は大量のレガシー C コードを含むプロジェクトでそれを使用しました。それほど単純ではありませんが、非常に強力です。

于 2012-08-19T18:47:23.163 に答える
0

他の提案されたソリューションとは少し異なる方法で、Gearmanを調べることができます。

基本的にはブローカーシステムです。あなたのケースではCで書くことができる労働者があり、あなたのpython/php/java/w/eコードからタスクを委譲することができます。

長所は、両方のアプリケーションを切り離すことです (アプリを別の言語で書き直すと、アプリが Gearman と通信するだけで済むため、おそらく作業は少なくなります)。

悪いことは、パフォーマンスの向上を無関係にする可能性のあるオーバーヘッドを追加すると思うことです。

于 2012-08-20T08:02:19.610 に答える