7

我正在拼命寻找一种快速类似 C 的语法易于嵌入易于包装的脚本语言以嵌入到我的 C++ 游戏中。

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

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

我也调查过:

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

所以:

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

8 回答 8

4

对于类似 C 的语法,请查看

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

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

还有SpiderMonkey,来自 Firefox 的 JS 引擎。

于 2013-07-16T08:38:55.177 回答
4

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

于 2013-07-16T16:05:49.230 回答
3

你可能对 Dao ( http://daoscript.org/ , https://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++ 绑定。

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

于 2013-07-17T22:33:34.827 回答
2

您可以通过Cling 之类的方式使用 C++ 。

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

Qt + Cling,基于 LLVM 的 C++ 解释器 (2:05)

于 2013-07-16T16:30:41.343 回答
1

我附议使用python作为脚本语言,我之前在我的程序(不是游戏)中使用了boost python并且对它非常满意。如果您想尝试创建自己的脚本,您可能想尝试提升精神

于 2013-07-16T10:02:08.980 回答
1

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

于 2013-07-16T16:20:33.650 回答
1

您可能对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;
}
于 2014-12-03T00:56:03.737 回答
0

您可能会考虑查看 python: http: //www.codeproject.com/Articles/14192/Embedding-Python-In-Your-C-Application

于 2013-07-16T08:39:30.420 回答