我想知道适合这种情况的语言:
我正在编写一个应用程序(C ++),我需要为它添加某种类型的脚本支持,但是这种语言必须能够“编译”。
此编译将生成某些人类无法读取的“字节码”。然后我需要能够获得这个字节码,将其加载到C ++应用程序中并执行它。
将c ++应用程序函数导出到脚本并调用脚本函数是必须的。
主要思想是在不触及C ++代码的情况下扩展应用程序功能,但用户必须很难阅读这些脚本。
我可以使用哪种语言?
答案 0 :(得分:4)
也许是Brainfuck?当然很容易找到解释器,并且比一般的机器代码或字节码更不易读。
答案 1 :(得分:1)
我想建议ChaiScript,但我们没有内置任何加密或字节码支持。
那就是说,没有理由不能使用任何现有的C ++脚本引擎。如果您提供自己的加密和解密功能以将脚本输入引擎,则可以使用ChaiScript,luabind等。
我所知道的支持c ++和字节码的一个脚本引擎是相对模糊的AngelScript。他们有一个加载页面pre-compiled bytecode。
答案 2 :(得分:1)
也许Vox *符合你的账单?
脚本可以预编译成可移植的字节码,并且非常容易嵌入,基于堆栈的API类似于Lua:
// most basic embedding example
VoxVM* v = vox_open(1024);
vox_aux_seterrorhandlers(v);
vox_pushroottable();
vox_dofile(v, "somescript.vx", false, true);
vox_pop(v, 1);
vox_close(v);
有关功能更全面的示例,请参阅etc/minimal.cpp和src/frontend/frontend.cpp
* Vox是一个我一直致力于为个人目的取代Lua的项目。它基于squirrel3虚拟机的高度修改版本(但不再与squirrel兼容!)。
语法也发生了一些变化:它使用<-
而不是:=
用于新广告位,而是使用{{1}}来避免语法错误。
Core已经完成并可以在嵌入式项目中使用,但是stdlib还没有完成,因为Vox是一个非常年轻的项目(因此,目前缺少文档,但是stdlib是嵌入式编程的一个很好的例子,以及通用脚本的示例。)
答案 3 :(得分:1)
我建议您使用LLVM。 LLVM的中间表示可以以字节码格式存储。您需要使用现有的前端来编写脚本语言或开发自己的前端。您的C ++应用程序可以加载字节码文件并JIT它。 Here是基于LLVM的现有项目列表。您可能会找到符合您需求的解决方案。
答案 4 :(得分:1)
LuaJIT是一个很好的,快速的Lua解释器,JIT将Lua转换为本机机器码。 LuaJIT字节码与平台无关,与常规Lua不同。
自己看看: http://luajit.org/luajit.html http://luajit.org/extensions.html