链接语言

2022-09-03 09:03:15

我之前问过一个问题,关于使用哪种语言进行AI原型。共识似乎是,如果我想让它变得很快,我需要使用像Java或C++这样的语言,但是Python / Perl / Ruby对接口位有好处。

所以,这就引出了另一个问题。将这些语言链接在一起有多容易?哪种组合效果最好?那么,如果我想让一个Ruby CGI类型的程序调用C++或Java AI函数,这很容易做到吗?关于我在哪里寻找有关做这种事情的信息的任何指针?或者不同的组合会更好吗?

我编写Web应用程序的主要经验是从C++CGI开始的,然后转向Java servlet(大约10年前),然后经过很长的间隔,我离开了编程,我做了一些PHP。但是我没有用脚本语言编写Web应用程序的经验,然后调用编译语言来表示速度关键位。因此,欢迎任何建议!


答案 1

Boost.Python提供了一种将C++代码转换为Python模块的简单方法。它相当成熟,在我的经验中效果很好。

例如,不可避免的你好世界...

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

可以通过编写Boost.Python包装器向Python公开:

#include <boost/python.hpp>

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

就是这样。我们完成了。现在,我们可以将其构建为共享库。生成的 DLL 现在对 Python 可见。下面是一个示例 Python 会话:

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

(示例取自 boost.org)


答案 2

首先,一个元评论:我强烈建议用高级语言编写整个内容,像疯了一样进行分析,并且仅在分析显示有必要时才进行优化。首先优化算法,然后优化代码,然后考虑引入重铁。拥有最佳算法和干净的代码将使事情变得更容易,当你/如果你需要用低级语言重新实现。

说到Python,IronPython/C#可能是最简单的优化路径。

带有C++的CPython是可行的,但我发现C更容易处理(但并不是那么容易,因为C)。缓解这种情况的两个工具是cython/pyrex(用于C)和shedskin(用于C++)。它们将Python编译成C / C++,从那里您可以访问C / C++库,而无需太多麻烦。

我从来没有使用过jython,但我听说jython/Java优化路径并不是那么糟糕。


推荐