Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哪些语言生成字节码并可以在C+中加载/执行+;_C++_Programming Languages_Bytecode_Vm Implementation - Fatal编程技术网

C++ 哪些语言生成字节码并可以在C+中加载/执行+;

C++ 哪些语言生成字节码并可以在C+中加载/执行+;,c++,programming-languages,bytecode,vm-implementation,C++,Programming Languages,Bytecode,Vm Implementation,我想知道什么语言适合这种情况: 我正在编写一个应用程序(C++),我需要为它添加一些脚本支持,但这种语言必须能够“编译” 此编译将生成某种人类无法读取的“字节码”。然后我需要能够获得这个字节码,把它加载到C++应用程序中并执行它。 向脚本导出C++应用程序函数,并调用脚本函数是必须的。 主要思想是在不接触C++代码的情况下扩展应用程序功能,但是用户必须很难阅读这些脚本。 我可以使用什么语言?我很想建议,但我们没有任何内置的加密或字节码支持 ,你没有理由不使用任何现有的C++脚本引擎。如果您提供自

我想知道什么语言适合这种情况:

我正在编写一个应用程序(C++),我需要为它添加一些脚本支持,但这种语言必须能够“编译”

此编译将生成某种人类无法读取的“字节码”。然后我需要能够获得这个字节码,把它加载到C++应用程序中并执行它。

向脚本导出C++应用程序函数,并调用脚本函数是必须的。

主要思想是在不接触C++代码的情况下扩展应用程序功能,但是用户必须很难阅读这些脚本。 我可以使用什么语言?

我很想建议,但我们没有任何内置的加密或字节码支持

,你没有理由不使用任何现有的C++脚本引擎。如果您提供自己的加密和解密函数将脚本提供给引擎,则可以使用ChaiScript、luabind等

我知道的一个脚本引擎支持C++和字节码,相对来说晦涩难懂。他们有一页正在加载。

也许*能满足您的要求

脚本可以预编译成可移植字节码,并且非常容易嵌入,基于堆栈的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);
有关功能更全面的示例,请参见和


*Vox是一个我一直致力于取代Lua用于个人目的的项目。它基于经过高度修改的Squirre3虚拟机版本(但不再与Squirre3兼容!)

语法也发生了一些变化:我建议您使用。LLVM的中间表示可以字节码格式存储。您将需要为脚本语言使用现有前端或开发自己的前端。您的C++应用程序可以加载字节码文件并将其加载JIT。
是基于LLVM的现有项目列表。你可能会找到一个适合你需要的解决方案。

也许是脑力操?当然,很容易找到解释器,而且可读性比一般的机器码或字节码低得多。

LuaJIT是一个不错的、快速的Lua解释器,它可以将Lua JIT转换为本地机器码。LuaJIT字节码与常规Lua不同,是独立于平台的

看看你自己:

>,你喜欢C++脚本,但你希望它是一个模糊的形式,它的字节码可能会混淆,防止用户逆向编写脚本。或者在加载/执行之前为我提供字节码加密/解密层的任何东西。为什么人们需要很难读取脚本字节码?不管你做什么,如果有人关心你想弄明白,他们会的。@GMan这是一种“安全系统”。一定有人很难进入其中。我知道我不能100%地保护应用程序,但这并不是不尽可能地保护它的借口。然后你问我:为什么要添加脚本支持?脚本系统将被添加,因为它将接收许多更新,这些更新将由许多消费者下载,并由无法访问主要源代码的程序员编写。@WoLfulus:我的观点是,它绝不是安全的。或者它是如此不可能破译以至于你自己的程序无法运行它,或者它是每个有能力对你的程序进行反编译的人都可以阅读的。模糊处理唯一能做的就是阻止那些一开始就不在乎的人。我知道我在别的地方认识你。我在一段时间前使用过ChaiScript,但是项目编译时间达到了让我恼火的程度。关于AngelScript,我也在使用它,这是一个令人惊奇的脚本引擎,但是缺少的一个片段是一个简单可靠的方法,用于将C++绑定到脚本,反之亦然(就像CasScript)。创建前端很容易吗?有没有使用这个的例子?使用LLVM似乎不是一件微不足道的任务。为LLVM创建前端需要相当数量的工作,但是您应该考虑使用上面链接所指向的现有工作之一。我不同意,LLVM当然不打算用于脚本编写,因为这是OP似乎想要的。事实上,嵌入LLVM并不是一件小事,因为它根本不是为此而设计的。如果您想编写编译器/解释器,它会更有用。此外,LLVM的il更像是一个高级汇编程序。@WoLfulus这是一个年轻的项目,所以只要您只依赖内核(例如,在Linux中构建的libvox.a),您就不必担心稳定性,因为内核现在已经完成,更改只会增加功能,但是没有删除任何内容。噢,a-1:P无论如何,我觉得这很有趣;)