用于游戏开发的C ++嵌入式脚本语言 - 找不到我喜欢的任何东西

时间:2013-07-16 08:34:58

标签: c++ c++11 scripting game-engine

我正在拼命寻找快速 C-like语法易于嵌入易于包装脚本语言嵌入我的C ++游戏。

到目前为止,我已经尝试过:

  • Lua :它可以工作,但是在它周围包装全局C ++函数是很痛苦的,并且包装对象更加困难。另外,我真的不喜欢Lua的语法。
  • AngelScript :无法让它发挥作用。初学者文档是绝对的,因为第一个示例不编译,并且您必须首先构建许多加载项。包装C ++对象和函数看起来比Lua更容易,但它仍然可以更清晰。语法看起来很好。
  • ChaiScript :无法让它发挥作用。我使用非git和git C ++ 11版本时遇到了很多错误。我不想使用boost版本,因为我不想在我的项目中引入boost作为依赖项。包装看起来很简单,语法也可以。

我也曾调查过:

  • Pike :语法看起来不错,但我找不到有关嵌入的文档。
  • Squirrel :我不喜欢语法,嵌入/包装和Lua一样烦人,不得不处理堆栈。

所以:

  • 是否有良好的快速 C-like语法易于嵌入易于包装替代方案?
  • 如果没有 - 创建脚本语言的最佳学习资源是什么?我喜欢重新发明轮子,这可能是一次有趣的学习经历。

8 个答案:

答案 0 :(得分:4)

您可能会考虑使用JavaScript。 V8脚本引擎可以嵌入到您的程序中,并且有关于如何expose your types的文档。

答案 1 :(得分:3)

对于类C语法,结帐

  • Ch商业,可嵌入的C语译员
  • CINT开源C / C ++解释器
  • Pawn - 一种“简单,无类型,32位扩展语言,具有类C语法”

可能不适合你,但是因为这个问题可能会出现其他人会觉得有趣的替代品列表,我提供给你QtScript,它给你一个类似Javascript的语法。包装可以很简单,但你需要采用Qt框架来完成它,特别是信号和插槽的概念。

还有来自Firefox的JS引擎SpiderMonkey

答案 2 :(得分:3)

您可能对Dao(http://daovm.nethttps://github.com/daokoder/dao)感兴趣。

Dao在标准C中实现,具有最小依赖性(如果排除可选模块和工具)。它重量轻,效率高,可以很好地支持嵌入和扩展。它用于调用C函数的接口不基于堆栈。这是一个简单的例子:

#include "stdio.h"
#include "daoValue.h"
static void Square( DaoProcess *proc, DaoValue *param[], int nparam )
{
    daoint num = param[0]->xInteger.value;
    DaoProcess_PutInteger( proc, num*num );
}
int DaoOnLoad( DaoVmSpace *vmspace, DaoNamespace *nspace )
{
    DaoNamespace_WrapFunction( nspace, Square, "Square( num : int ) => int" );
    return 0;
}

您可能会注意到没有用于检查包装函数中参数类型的样板代码。这是因为此函数注册为Square(num:int)=>int,这意味着此函数只能接受整数作为参数,并且由Dao运行时保证。

您可能也有兴趣知道它还有一个基于Clang的工具,用于自动/半自动生成C / C ++绑定。

免责声明:我是这种语言的作者。

答案 3 :(得分:2)

你可以通过像Cling这样的东西来使用C ++。

您可以获得熟悉的语法并轻松与静态C ++程序集成。

Qt + Cling, the LLVM based C++ interpreter (2:05)

答案 4 :(得分:1)

我使用python作为脚本语言借调,我之前在我的程序(不是游戏)中使用boost python并且对它非常满意。如果您想尝试创建自己的脚本,可以尝试boost spirit

答案 5 :(得分:1)

除了其他人的建议之外,还有Cling被认为是实验性的。编写脚本语言并不容易,但现在你可以使用LLVM,至少是后端。 N. Wirth在旧的“算法+数据结构=程序”中简要讨论了编程语言设计(但请检查内容主题,在最新版本中删除了该章节),如果您在Google上搜索作者,那么'最后肯定会与其他一些关于这个主题的出版物结束。

答案 6 :(得分:1)

您可能对ObjectScript

感兴趣

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

答案 7 :(得分:0)