【发布时间】:2019-10-23 16:46:30
【问题描述】:
我正在开发人群模拟器。这个想法是人们在 2D 中在城市中行走。想想建筑物的灰色矩形和人们的彩色圆点。现在我希望这些人可以被其他人编程,而不是让他们访问核心后端。
我也不希望他们能够使用我为他们提供的方法以外的任何东西。意味着没有文件访问、互联网访问、RNG,什么都没有。
他们将收到诸如“您刚刚被指示前往 X”或“您已到达 P”等事件。
然后脚本应该允许他们执行诸如 move_forward 或 how_many_people_are_in_front_of me 之类的事情。
现在我发现 Lua 和 python 都比编译语言慢数千倍(我认为它会慢 10 倍的数量级),这对我的模拟来说很慢。
所以这是我的问题:是否有一种编程语言是 FOSS,允许我限制整个语言的系统访问(沙盒)以限制脚本具有的信息量,只允许它使用我提供的功能,这是相当快的,比 Java 慢 10 倍之类的东西,我可以将事件发送到该语言内的对象,我可以使用这些对象动态加载新的类/对象。
【问题讨论】:
-
"我发现 Lua 和 python 都比编译语言慢数千倍" 真的吗?您是否已经分析了一些预期脚本,或者您是否正在使用其他人的号码?你试过 LuaJIT 吗?
-
此外,语言的性能仅相对于这些语言的处理对您的整体程序性能的重要性而言才重要。例如,如果一个脚本基本上调用了您的一些函数,根据返回值做出有条件的决定,仅此而已,那么该代码的性能很可能将基于 您提供的函数 i>,而不是发出这些调用的脚本。
-
大部分时间它会运行脚本代码,因为它是人民的智慧。这是我用的。 benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/… 1000 次可能是最坏的情况,但我发现慢 100 倍也是不可接受的。
-
"大多数时候它会运行脚本代码,因为它是人民的智慧。" 不要那么肯定。即使脚本很长,也完全有可能大部分时间没有花在脚本语言本身上。我想执行对
how_many_people_are_in_front_of的调用将花费远 的时间来计算,而不是脚本为使用返回值所做的任何事情。始终为自己的特定用例进行基准测试;固定基准对您的特定用例没有用处。 -
嗯好的。尽管该事件所做的只是创建一个 2D 三角形来代表一个人的视觉并简单地计算他会看到多少人。