C++;用于游戏开发的嵌入式脚本语言-can';我找不到我喜欢的东西 我急切地寻找一个快, C类语法>强> >嵌入< >强>易于包装强脚本语言嵌入到我的C++游戏中。
到目前为止,我已经尝试:C++;用于游戏开发的嵌入式脚本语言-can';我找不到我喜欢的东西 我急切地寻找一个快, C类语法>强> >嵌入< >强>易于包装强脚本语言嵌入到我的C++游戏中。,c++,c++11,scripting,game-engine,C++,C++11,Scripting,Game Engine,到目前为止,我已经尝试: 强> Lua:它是有效的,但是环绕全局C++函数是痛苦的,并且包装对象更困难。而且,我真的不喜欢Lua的语法 AngelScript:无法使其工作。初学者文档是不存在的,因为第一个示例没有编译,您必须首先构建许多附加组件。包裹C++对象和函数看起来比Lua更容易,但它仍然可以更干净。语法看起来不错 ChaiScript:无法使其工作。我在非git和GitC++11版本中都遇到了很多错误。我不想使用boost版本,因为我不想在我的项目中引入boost作为依赖项。包装看起
- AngelScript:无法使其工作。初学者文档是不存在的,因为第一个示例没有编译,您必须首先构建许多附加组件。包裹C++对象和函数看起来比Lua更容易,但它仍然可以更干净。语法看起来不错
- ChaiScript:无法使其工作。我在非git和GitC++11版本中都遇到了很多错误。我不想使用boost版本,因为我不想在我的项目中引入boost作为依赖项。包装看起来很简单,语法也不错
- 强> Lua:它是有效的,但是环绕全局C++函数是痛苦的,并且包装对象更困难。而且,我真的不喜欢Lua的语法
- Pike:语法看起来不错,但我没有找到关于嵌入的文档
- Squirrel:我不喜欢语法,嵌入/包装和Lua一样烦人,必须处理堆栈
- 是否有好的快速,类似C的语法,易于嵌入,易于包装的替代方案
- 如果没有-创建脚本语言的最佳学习资源是什么?我喜欢重新发明轮子,这可能是一次有趣的学习经历
- 一种商用的嵌入式C解释器
- 一个开源的C/C++解释器
- -一种“具有类似C的语法的简单、无类型、32位扩展语言”
还有,来自Firefox的JS引擎。
你可以考虑看Python:
我支持使用python作为脚本语言,我以前在我的程序(不是游戏)中使用过python,对此非常满意。如果您想尝试创建自己的脚本,您可以尝试使用JavaScript。脚本引擎可以嵌入到您的程序中,并且有关于如何嵌入的文档。除了其他人的建议之外,还有一些被认为是实验性的。编写脚本语言并不容易,但现在您可以求助于,至少在后端是这样。编程语言的设计在C++的“算法+数据结构=程序”中简单地讨论过(但请检查内容主题,在删除的最新版本中),如果你在谷歌上搜索作者,你肯定会和其他一些关于这个主题的出版物相关联。 < P>你可以使用C++,通过类似的方式 <>你得到熟悉的语法和易于集成的静态C++程序。
您可能对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++绑定
免责声明:我是此语言的作者。您可能对 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;
}
#包括
使用命名空间ObjectScript;
int main(int argc,char*argv[])
{
OS*OS=OS::create();//craete ObjectScript实例
os->require(“main.os”);//运行ObjectScript程序
os->release();//释放ObjectScript实例
返回0;
}
作为参考很好,但OP不想在他的项目中引入boost作为依赖项。@PaperBirdMaster不想使用boost.Python,因为“它引入了对boost的依赖项”提醒我任何脚本语言都会引入依赖项,而使用BCP只能隔离Boost所需的部分。我基本上同意你@TemplateRex的观点,但告诉OP,是他设置了限制;)你在用什么编译器?ChaiScript 5目前不支持VC++,因为VC++缺乏基本的C++11功能…自己创建脚本语言是一种很好的学习体验。虽然这需要一些时间,但有相当好的工具可以减轻痛苦。对于前端,我建议看一看:“我不喜欢语法”,这不是避免使用经过良好测试、设计良好的语言的好理由。这是一个幼稚的理由,不是一个专业的理由。您将永远无法开发一种基础良好、经过良好测试并广泛使用的语言,甚至无法开发出更新的脚本语言,更不用说像Lua这样被广泛使用的老备用语言了。如果您在语法方面有一些问题,