选择嵌入式语言

7

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

说实话,我有点担心运行时开销,因为我正在进行一些相当重的数据处理,我不希望每次模拟都要等待几分钟。在这些迭代中,我通常会调用外部的“代理”数十万次,甚至数百万次;我是应该将所有内容硬编码到应用程序中,还是性能下降是可以容忍的?

此外,除了Python之外,还有其他解释型语言可以使用吗?


1
使用Python/C API吧,我在我的应用程序中使用它,没有任何后悔。 - Nathan Osman
7个回答

10

是的,有很多种。Lua和Python似乎是最流行的:

嵌入Lua

嵌入Python

嵌入Tcl

嵌入Ruby

嵌入Perl

嵌入JavaScript

有许多JavaScript引擎可供选择,这只是其中的一个例子。其中一些也非常快速。


4
在我看来,Lua 可能是嵌入式编程中文档最为丰富的语言,它已成为游戏开发的事实标准。 - Paul Nathan
1
确实,这很简单。我没有自己嵌入它,而是在自定义的Garry's Mod模块中使用了它,并使用C API传递了一些东西。对于当时15岁的我来说,这足够简单(我的计算能力就像海绵一样)。 - Skurmedel
2
Tcl 可能会挑战 Lua 成为最有文档记录的语言,尽管这是主观的。它也比 Lua 更早存在。它不像 Lua 那样“热门”,但至少同样好。 - Bryan Oakley
随意将其添加到列表中。 - Skurmedel
Lua的解释器比Python的小,但它最初是为了进行配置而创建的,因此Python更少出错且具有更强大的语法。它还极大地受益于NumPy进行数字计算,尽管添加外部模块也使得嵌入Python成为一项更大的任务。 - KingRadical

9

Lua本来就很快。如果你需要更快的速度,请尝试LuaJIT,它非常出色。


5

Tcl是一种从头开始设计的嵌入式语言。


当我在编辑时,你给出了与我一样的答案。显然是天才。+1 - T.E.D.
1
Lua 也是从一开始就被设计成嵌入式语言。 - lhf
1
@lhf:是的,有几种语言是从头开始设计成嵌入式的。 - Bryan Oakley
有哪些其他编程语言是从头开始设计为嵌入式的? - Vortico

3

我通常会进行数十万次、甚至数百万次迭代,在其中调用外部“代理”。

性能下降会很明显,甚至可能是痛苦的。如果你可以将数据放入数组中,并使用NumPy批处理处理,那么速度应该会更快。

NumPy使得在一系列操作中执行任何一种算术运算变得非常容易。例如,对数组中的每个元素进行平方就像这样:

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

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

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


2
我相信tclRexx都是为此目的而设计的。

1

对于数以百万计的调用(我假设是从C++调用,因为你提到了Boost)进入Python,是的:你会注意到性能下降。这可能很重要,也可能不重要——也许尝试新的“代理”所获得的速度增益会比受到的影响更大。Python确实有快速的数值库(例如NumPy),可以帮助解决问题,但你仍然需要耗费数据编组、调用Python和GIL等方面的开销。

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接