2

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

我一直在网上搜索和搜索这个,除非我不知道这种做法的名称,否则我似乎找不到任何东西。

简而言之,我该如何:

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

我只是不确定如何使用这种技术,但它似乎是一种非常聪明的方法,可以利用 Java、PHP 和 Python 的强大功能,同时利用非常快速的编程语言来完成大型、复杂的任务.

我脑海中闪过的另一个想法是,如果我只使用 Java/PHP/Python 中的文字创建函数,它会不会和 C 一样快?

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

4

4 回答 4

4

您可以使用 Boost.Python 轻松地使用自定义 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方式更令人愉快。

于 2012-08-19T18:39:19.247 回答
0

尽管我同意这些评论(你可能会这样做是为了好玩,但对于商业来说这是个坏主意)你可能对这个类似的问题感兴趣。提到的SWIG 框架支持你提到的所有语言。我在一个包含大量遗留 C 代码的项目中使用它。不是很简单,但非常强大。

于 2012-08-19T18:47:23.163 回答
0

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

于 2012-08-20T07:25:45.077 回答
0

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

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

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

坏事是我认为你会增加开销,这可能会使性能提升无关紧要。

于 2012-08-20T08:02:19.610 回答