【问题标题】:Choosing embedded scripting language for C++为 C++ 选择嵌入式脚本语言
【发布时间】:2011-09-05 12:54:38
【问题描述】:

我想选择一种用于 C++ 的嵌入式脚本语言。它应该连接数据库,例如 Oracle。我的主机应用程序是一个服务器应用程序。这会将原始数据传递给脚本。该脚本将解析并执行一些特定的逻辑。还更新数据库。然后脚本将返回原始数据作为结果。 可以帮我选吗? 谢谢

【问题讨论】:

  • 您要解决的问题是什么?为什么要这样做,而不是只使用 C++ 或只使用 ie。 Python?速度重要吗?
  • 我想分离我的服务器代码和业务逻辑。业务逻辑也经常变化。我已经 C++ 所有步骤。我将制作一个仅作为服务器运行的核心。业务逻辑将在脚本上。

标签: c++ python ruby scripting lua


【解决方案1】:

Lua 旨在成为一种嵌入式语言,并具有simple API。 Python 和 Ruby 更通用,并且(至少对于嵌入)要复杂得多。仅这一点就可以引导我使用 Lua。

【讨论】:

  • Python 也打算成为一种嵌入式语言:docs.python.org/extending/embedding.html
  • @Alexander:不是故意的。可以嵌入它,但这不是它的最初目的,您可以在嵌入它所需的努力中看到它。
  • 使用 boost.python 非常简单。但是你也有 LuaBridge 和 LuaBind。
【解决方案2】:

Lua 已被提及,使用luabind 将为您提供更多 c++ 风格的界面。
你也可以看看chaiscript。它的设计更适合 c++。

【讨论】:

  • +1:用于 Chaiscript。它很容易集成甚至方法重载。
  • +1 同上。我一直在寻找这样一种脚本语言。大多数脚本语言的 C api 很笨重,即使包装起来也显得格格不入。
【解决方案3】:

将此保存为 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 测试 -I/usr/include/python2.7 -lpython2.7

现已嵌入 Python。这花了我不到一分钟的时间,所以我很难理解“嵌入它所需的努力”的说法。

示例来自http://docs.python.org/extending/embedding.html

我会建议使用 Python 而不是 Lua,尽管 Lua 也不错。

【讨论】:

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

我在使用 AngelScript 将嵌入式脚本添加到我的 C++ 应用程序中取得了很大成功。我发现它很容易绑定,语法也很舒服,但这取决于你的目标受众。我发现 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

【讨论】:

    【解决方案5】:

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

    我个人会选择您和/或将使用该脚本语言的任何人已经最熟悉的脚本语言,特别是如果最终用户能够运行自定义脚本,您将需要知道什么(如果有) , 他们在业务领域熟悉的语言,例如CAD/CAM人可能知道TCL,游戏人可能知道Lua等。

    【讨论】:

      【解决方案6】:

      你可能对ObjectScript感兴趣

      ObjectScript,简称OS,是一种新的编程语言。它是免费的、跨平台的、轻量级的、可嵌入的和开源的。它结合了多种语言的优点,包括:JavaScript、Lua、Ruby、Python 和 PHP。操作系统具有 Javascript 的语法、lua 的“多结果”功能、Ruby 的语法 shugar 以及 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;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-01-07
        • 2011-04-20
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 2011-08-17
        • 2013-02-21
        • 2015-02-14
        • 2012-10-25
        相关资源
        最近更新 更多