选择嵌入式脚本语言用于C++

9

我想选择一门嵌入式脚本语言来与C++配合使用。它应该能够连接像Oracle这样的数据库。我的宿主应用程序是一个服务器应用程序,它将原始数据传递给脚本。脚本将解析并执行一些特定的逻辑,并更新数据库。然后脚本将以原始数据作为结果返回。

你能帮我选择吗?

谢谢。


你想要解决什么问题?为什么要用这种方式来解决,而不是只使用C++或Python等其他语言?速度是否很重要? - Alexander
2
我想将我的服务器代码和业务逻辑分开。此外,业务逻辑经常会发生变化。我已经用C++完成了所有步骤。我将制作一个仅作为服务器运行的核心。业务逻辑将在脚本中实现。 - suyuti
6个回答

20

Lua旨在成为一种嵌入式语言,并具有简单的API。Python和Ruby更多地是通用目的语言,至少对于嵌入而言,它们要复杂得多。这一点就足以让我选择使用Lua。


1
Python 也旨在成为一种嵌入式语言:http://docs.python.org/extending/embedding.html - Alexander
6
@Alexander:并非打算如此。虽然可以嵌入,但这不是它最初的目的,你可以从嵌入所需的努力中看出来。 - Klaim
使用boost.python非常容易。但你还可以使用LuaBridge和LuaBind。 - Germán Diago

12

Lua已经被提到,使用luabind将为您提供更符合C ++风格的接口。
您还可以查看chaiscript。它更适合集成到c++中。


2
+1:为Chaiscript。它非常容易集成,甚至重载方法也可以工作。 - schoetbi
+1 同感。我已经寻找这样的脚本语言很长时间了。大多数脚本语言的 C API 都很繁琐,即使你将其封装起来,看起来也不协调。 - Tim Seguine

8

将此保存为test.c:

#include <Python.h>

int
main(int argc, char *argv[])
{
  Py_Initialize();
  PyRun_SimpleString("from time import time,ctime\n"
                     "print 'Today is',ctime(time())\n");
  Py_Finalize();
  return 0;
}

运行以下命令(如果您已安装Python 2.7):

gcc test.c -o test -I/usr/include/python2.7 -lpython2.7

Python现在已经被嵌入进来。这个过程花费不到一分钟的时间,因此我很难理解所需“嵌入它的努力”的说法。
示例来源于http://docs.python.org/extending/embedding.html
尽管Lua也不错,但我会建议使用Python。

有没有示例项目?我需要从脚本进行Oracle连接。字节数组传递到/从脚本方法接收。 - suyuti
您可以通过安装cx_Oracle模块来使用Python连接Oracle:http://www.orafaq.com/wiki/Python。请注意,Lua似乎也支持Oracle:http://www.keplerproject.org/luasql/manual.html。 - Alexander
1
我觉得这不是一个正面的回答。要进行真正的嵌入,我们希望能够在Python和C/C++之间传递对象。这需要比这更多的工作。 - Pramod
1
在C/C++和脚本语言之间传递对象需要为Lua和Python(以及其他解决方案)进行工作。 - Alexander

5
我在我的C++应用程序中添加嵌入式脚本时,使用AngelScript取得了很多成功。我发现它非常容易绑定,并且语法很舒适,但这取决于你的目标受众。我发现Lua非常快速且相对容易绑定,但是语法对我来说有点不舒服。AngelScript非常类似于C/C++,我发现很容易理解和维护,但是对于那些更多时间用于CSS或HTML的人来说,可能会觉得笨重,而且语言习惯可能无法很好地转换。

http://www.angelcode.com/angelscript/

http://www.gamedev.net/forum/49-angelcode/

刚刚意识到我在这里回答了一个类似的问题:

https://stackoverflow.com/questions/191222/what-is-a-good-embeddable-language-i-can-use-for-scripting-inside-my-software


2

您可能对ObjectScript感兴趣。

ObjectScript,简称OS,是一种新的编程语言。它是免费的、跨平台的、轻量级的、可嵌入的和开源的。它结合了多种语言的优点,包括:JavaScript、Lua、Ruby、Python和PHP。OS具有Javascript的语法、来自lua的“多结果”特性、来自Ruby的语法糖以及来自PHP和Ruby的魔术方法 - 还有更多!

使用ObjectScript的最小程序可能像这样:

#include <objectscript.h>
using namespace ObjectScript;
int main(int argc, char* argv[])
{
    OS * os = OS::create(); // craete ObjectScript instance
    os->require("main.os"); // run ObjectScript program
    os->release();          // release the ObjectScript instance
    return 0;
}

2

TCL是另一个易于嵌入的脚本语言选择。

个人建议选择您和/或将使用脚本语言的人已经熟悉的语言,特别是如果最终用户将能够运行自定义脚本,您需要了解他们在其业务领域中熟悉的任何语言,例如CAD / CAM人员可能会知道TCL,游戏开发者可能会知道Lua等。


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