Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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
Lua,我可以从C++;? < P>让我把Lua嵌入到C++应用程序中。这个问题听起来很奇怪,但我感兴趣的是,有没有一个“强”标准< /强>从C++侧禁用Lua特性?_C++_Lua - Fatal编程技术网

Lua,我可以从C++;? < P>让我把Lua嵌入到C++应用程序中。这个问题听起来很奇怪,但我感兴趣的是,有没有一个“强”标准< /强>从C++侧禁用Lua特性?

Lua,我可以从C++;? < P>让我把Lua嵌入到C++应用程序中。这个问题听起来很奇怪,但我感兴趣的是,有没有一个“强”标准< /强>从C++侧禁用Lua特性?,c++,lua,C++,Lua,例如,我想禁用新变量创建,除了一些已定义的变量,如下所示: local time = 10 local size = 20 function test() return time * size end 如果我定义的不是时间、大小和测试函数,我想让luavm失败。这是否可能不攻击虚拟机本身 或者,例如,我想禁用循环(用于和while语句)。一个选项是获取并删除不需要的部分。这并不像听起来那么疯狂:代码可读性很强。不,没有任何标志用于禁用该语言的核心功能。而且,不可能以任何合理的方式为“只允许

例如,我想禁用新变量创建,除了一些已定义的变量,如下所示:

local time = 10
local size = 20
function test()
  return time * size
end
如果我定义的不是
时间
大小
测试
函数,我想让luavm失败。这是否可能不攻击虚拟机本身


或者,例如,我想禁用循环(用于和
while
语句)。

一个选项是获取并删除不需要的部分。这并不像听起来那么疯狂:代码可读性很强。

不,没有任何标志用于禁用该语言的核心功能。而且,不可能以任何合理的方式为“只允许X个变量”设置编译时标志

修改lua以删除
for
while
可能相当简单,但修改lua以不允许创建变量可能不太容易(我认为可能不会)

类似的东西实际上会使这类事情变得更容易。

限制可以创建或访问的全局变量的名称很容易:只需使用具有适当元方法的环境加载脚本即可

限制局部变量的名称需要一些深入的黑客攻击,而且可能不值得,因为它们不会影响宿主程序

限制关键字不能开箱即用,但可以通过一些简单的技巧来实现:


要删除一些关键字,只需在llex.c中luaX_标记中的相关字符串中添加一个空格。这些关键字将可用于变量名,相应的语法结构将无法访问,并将引发错误。例如,要删除循环,请禁用
For
while
,以及
repeat
。您可以在和中保留
,直到
,但他们不会做任何事情。如果要动态执行此操作,请参阅。

谢谢您的建议。我不介意潜入Lua代码,但我想知道是否有更简单的方法。比如,在搜索这样一个东西时,我可能遗漏了一些标志或东西:)。我有相同的观点,例如,阻塞变量应该是代码中至关重要的部分,因此不容易删除。我没听说过metalua谢谢。@lukas.pukenis,当然。请分享您选择的任何解决方案。我还没有选择任何解决方案,因为我现在还没有实际实施它。我需要一种伪语言。我认为Lua是完美的,但我想限制语言功能(考虑游戏目的),所以想知道它有多大可能:)