无法与外界交互的脚本语言

Scripting language that cannot interact with the Outside world

我需要一种方法来灵活定义某些任务的执行顺序。没有并行性,一次只有一个任务处于活动状态。每个任务都有一个结果(一组原始值,如整数浮点数或字符串。接下来执行哪个任务可能取决于先前任务的结果。

大多数时候这些依赖关系很简单,比如 "outcome > 5"。但有时它们更复杂。例如,如果某个单词在前一个任务的字符串输出中多次出现,则接下来执行某个任务。它们也可以是我还没有想到的更复杂的条件。

所以我的想法是使用一种简单的脚本语言来定义flow/order任务。它看起来像这样:

outcome1 = performTask('task1');
outcome2 = performTask('task2');
if (outcame1.value > 3 && outcome2.value == "success) {
    performTask('task3');
} else {
    performTask('task4');
}

我喜欢这个主意。现在的问题是使用哪种脚本语言?

由于最终用户将编写脚本并可能与其他用户交换脚本,所以我担心 "viruses"。结果数据是高度机密的,所以一定没有办法以某种方式输出数据。理想情况下,我会将语言的使用限制在核心功能(假设这不涉及任何 IO)加上我提供的一组功能。

一开始我会在C++项目中使用该语言,如果以后能支持浏览器(javascript)就好了。

我可以发明我自己的脚本语言并编写我自己的解释器,但我希望避免那样做。

那么我可以使用哪种脚本语言和哪种解释器来满足这个要求?

通常为此做的是 "sandboxing" 例如 lua 可以被沙盒化,这被描述为 here.