在Java/PHP/Python框架内,在编译的C/C++代码中运行算法


Running algorithms in compiled C/C++ code within a Java/PHP/Python framework?

偶尔,我会遇到一些编程技术,包括用Java、PHP或Python创建应用程序框架或网站,但当需要复杂的算法时,用C或C++编写这些算法,并在Java/PHP/Python代码中作为类似API的函数调用运行。

我一直在网上搜索这个,除非我不知道这个机构的名字,否则我似乎找不到任何东西

简单地说,我怎么能:

  1. 在C或C中创建函数或类++
  2. 将它们编译成DLL/二进制/某种形式
  3. 从-运行函数
    • Java
    • PHP
    • Python
  4. 我怀疑类似JSON/XML的输出和输入必须在Java/PHP/Python和C/C++函数之间创建,这样数据就可以很容易地桥接,但这没关系

我只是不知道如何使用这种技术,但它似乎是一种非常聪明的方式,可以利用Java、PHP和Python的强大功能,同时利用非常快速的编程语言执行大型复杂任务。

我脑子里的另一个想法是,如果我在Java/PHP/Python中只使用文字来创建函数,它的速度会和C一样快吗?

我希望用C/C++处理的具体任务是大规模循环、ping数据库和分析映射。还没有任何工作开始,现在都是理论。

您可以使用Boost轻松地使用自定义C++代码扩展python脚本。有关详细信息,请访问此网站: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框架支持你提到的所有语言。我在一个包含大量遗留C代码的项目中使用了它。不是很简单,但很强大。

对于Java,你可以搜索JNI(Java Native Interface),有很多指南告诉你如何使用它。

与其他提出的解决方案略有不同,您可以查看Gearman

基本上,这是一个经纪人系统。您有worker,在您的情况下可以用C编写,您可以将python/php/java/w/e代码中的任务委派给它。

优点是你可以解耦两个应用程序(如果你用另一种语言重写你的应用程序,你可能会减少工作量,因为你只需要让应用程序与Gearman对话)。

糟糕的是,我认为你会增加开销,这可能会使性能提升变得无关紧要。