选择嵌入式语言

我正在开发一个应用程序,使用多种不同的算法(代理)分析一个或多个系列的数据。我想到每个代理都可以作为单独的 Python 脚本实现,用 Python C API 或 Boost.Python 在我的应用程序中运行。

老实说,我有点担心运行时的开销,因为我正在进行一些相当重型的数据处理,我不想等几分钟才能完成每个模拟。在我调用外部“代理”的数十万甚至几百万次迭代中,我通常会制作成千上万个迭代;我是硬编码在应用程序中,还是性能降低可以容忍呢?

还有,除了 Python,我还能使用哪些其他解释性语言?

原文链接 https://stackoverflow.com/questions/2103728

点赞
stackoverflow用户206328
stackoverflow用户206328

你可能可以使用 C++ 模板和运算符重载创建一个内嵌语言,例如可以看看 ublas 或 ftensor 矩阵语言。我认为 Python 或其他解释语言不适合进行大量数值计算或数据处理。

2010-01-20 18:12:02
stackoverflow用户169658
stackoverflow用户169658

对于从 C++(我假设您使用了 Boost)调用 Python 的数百万次调用,是的:您会注意到性能下降。这可能很重要,也可能不重要 - 也许尝试新的“代理”所获得的速度增益将比损失更大。Python确实拥有快速的数字库(例如numpy),这可能有所帮助,但您仍将遭受数据编组,调用Python,GIL等开销。

是的,您可以嵌入许多其他语言:请查看lua。此外,请查看swig.org,它可以连接到除Python之外的许多其他语言。

2010-01-20 18:19:49
stackoverflow用户12183
stackoverflow用户12183

是的,有很多种。Lua 和 Python 似乎是最受欢迎的:

嵌入 Lua

嵌入 Python

嵌入 Tcl

嵌入 Ruby

嵌入 Perl

嵌入 JavaScript

有很多 JavaScript 引擎,这只是其中的一个例子。其中有一些引擎也非常快。

2010-01-20 18:23:06
stackoverflow用户94977
stackoverflow用户94977

我通常会进行成千上万,如果不是数百万次迭代,其中会调用外部“代理”。

性能下降会很明显,也许会很痛苦。如果您可以将数据放入数组中,并使用 [NumPy](https://numpy.org/)批处理进行处理,速度应该会更快。

NumPy使得连续进行任何类型的算术操作变得非常简单,例如,对数组中的每个元素进行平方操作可以这样实现:

>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> x ** 2
array([1, 4, 9, 16, 25, 36, 49])

非常容易,而且 这里的紧密内部循环实际上是用C实现的。

当然,NumPy还可以进行更高级的数值计算。

2010-01-20 18:35:06
stackoverflow用户7432
stackoverflow用户7432

Tcl 从一开始就被设计为嵌入式语言。

2010-01-20 19:08:53
stackoverflow用户29639
stackoverflow用户29639

我相信 tclRexx 都是为了这个目的而设计的。

2010-01-20 19:14:19
stackoverflow用户107090
stackoverflow用户107090

Lua 本身已经相当快了。如果你需要更多的速度,可以尝试使用 LuaJIT,它非常出色。

2011-02-09 21:24:57