是否有类似lua的可沙盒编译的编程语言

时间:2019-06-08 13:22:48

标签: lua scripting add-on

我正在研究人群模拟器。这个想法是人们以2D模式在城市中行走。为建筑物考虑灰色矩形,为人们考虑彩色圆点。现在,我希望这些人可以被其他人编程,而又不让他们访问核心后端。
我也不希望他们能够使用我提供给他们的方法以外的任何东西。表示无文件访问,互联网访问,RNG,什么都没有。
他们将收到诸如“您刚刚被指示去X”或“您已经到达P”之类的获取事件。
然后,脚本应允许他们执行诸如此类的move_forward或how_many_people_are_in_front_of之类的事情。
现在,我发现Lua和python的速度都比编译语言慢数千倍(我认为它的速度要慢10s倍),这对于我的仿真来说是很慢的。
所以这是我的问题:是否有一种FOSS编程语言,是否允许我限制整个系统的访问(沙盒装),以仅允许脚本使用我提供的功能来限制脚本所具有的信息量,因此速度相当快,类似于<比Java慢10倍,在其中我可以将事件发送到该语言内的对象,并可以使用该语言动态加载新的类/对象。

1 个答案:

答案 0 :(得分:0)

您难道不认为,如果有一种脚本语言比lua和python快,那么至少会被谈论得最多吗?

脚本语言的速度是相当模糊的术语。脚本语言本质上会转换为对以快速编译语言编写的函数的一系列调用。但是,通常将这些功能编写为具有许多检查和故障安全功能的通用功能,而不是快速提供功能。对于某些问题,没有很多多余的动作叠加在一起,并且脚本翻译产生的机器代码与编译后的程序本质上是相同的。对于其他问题,一个精通该语言的人可能会强迫其将其翻译成基本上相同的机器代码。对于其他问题,便利的代价永远与脚本无关。

如果您查看benchmark tasks的时间,您会发现他们之间没有一致的赢家。对于一项任务,语言是最快的,而对于另一项任务,则是落后的。

通过在基准测试中查看类似的任务来评估您的任务的语言速度是很有意义的。那么,哪些问题映射最接近您?我的猜测是:没有。


现在,讨论程序内部的用户程序问题。

这就是脚本语言首先出现的方式。您可以阅读为什么在SICP中这种语言可能会变慢的原因。

如果您评估了人们希望人们在他们的程序中编写的内容,那么您可能会决定,不需要为他们提供完整的编程语言。然后,您可以给他们提供一套简单的说明,他们可以使用它们来描述一些分支决策和值查找。然后,您自己的高性能程序将构造一个包含所描述逻辑的对象。 herethere描述了此度量标准。

但是,如果您继续添加越来越多的复杂命令供用户调用,则最终会发明own language。到那时,您可能希望您从一开始就和Lua一起去。

话虽这么说,但我认为下面的代码片段在编译后的代码,您自己的解释器对象或任何嵌入式脚本语言中不会有明显不同:

if event = "You have just been instructed to go to X":
    set_front_of_me(X) # call your function
    n = how_many_people_are_in_front_of_me() #call to your function
    if n > 3:
        move_to_side() #call to function provided by you
    else:
        move_forward() #call to function provided by you

现在,如果用户需要处理复杂的计算机科学知识,解决np问题,进行机器学习或其他矩阵乘法,那么是的,如果有人确实会麻烦自己实现这一点,那将会很慢。

如果您明白了这一点,似乎至少有一些可能性可以对已编译的dlls进行沙箱化(至少在某些语言中如此)。或者,您可以自己编译用户代码以控制他们调用的功能,然后将其作为库插入。