有没有一种类似Lua的可沙盒化编译型编程语言?
2019-6-8 13:22:49
收藏:0
阅读:76
评论:1
我正在制作一个人群模拟器。想象一下二维城市中的人们走来走去。城市建筑用灰色矩形表示,人用彩色点表示。现在我想让其他人编写可以控制这些人的程序,同时不需要他们接触到后端核心。
我也不希望他们能够使用我未提供给他们的方法以外的任何功能。这意味着他们无法访问文件、网络、随机数等等。
他们将获得像“你刚刚被指示去X”或“你已经到达P”之类的事件。
脚本应该允许他们做一些事情,例如移动_forward 或 how_many_people_are_in_front_of me 等等。
现在我发现Lua和Python的速度都比编译型语言慢数千倍(我以为它会比10倍还慢一个数量级),这对于我的模拟来说太慢了。
所以我的问题是:有没有一种编程语言是FOSS的,可以让我限制系统访问(沙盒化)整个语言,通过仅允许使用我提供的函数来限制脚本具有的信息量,并且速度相当快,类似于比Java慢小于10倍的东西,我可以在该语言内向对象发送事件,通过这些事件我可以在运行时加载新的类/对象。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你不觉得如果有一种比 Lua 和 Python 更快的脚本语言,那么它至少会被像它们一样广泛讨论吗?
脚本语言的速度是一个相当模糊的概念。脚本语言本质上转换为一系列快速编译语言编写的函数调用。但是,这些函数通常编写为通用的,具有许多检查和故障保护,而不是为了速度。对于某些问题,重复操作很少积累,脚本翻译结果与编译程序本身的机器码本质上相同。对于其他问题,了解该语言的人可能会迫使其翻译为本质相同的机器码。对于其他问题,方便的价格将永远保留在脚本中。
如果您查看基准测试任务的时间,您将发现它们之间没有一致的赢家。对于一个任务,语言是最快的,另一个任务则远远落后。
通过查看基准中类似任务的语言速度,以判断语言在您的任务中的速度是否合适。那么,哪一个问题与您的最接近?我猜没有。
现在,进入您程序中的用户程序问题。
这就是脚本语言首次出现的方式。您可以阅读有关为什么此类语言可能会很慢的内容,例如SICP。
如果您评估您期望人们在其程序中编写的内容,您可能会决定不需要为他们提供整个编程语言。然后,您可以为他们提供一组简单的指令,他们可以使用这些指令来描述几个分支决策和值查询。然后,您自己非常高效的程序将构建一个包含所描述逻辑的对象。这个技巧已经被描述,如此。
但是,如果您不断添加越来越复杂的命令供用户调用,最终您只会发明自己的语言。在那时,您可能希望从一开始就使用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(至少在某些语言中)。或者您可以自己对用户代码进行编译,以控制他们调用的功能,然后将其作为库插入。