0

我正在寻找一种以可验证的确定性方式运行 awk 的方法,也就是说:结果应仅由输入确定。换句话说,假设一个程序有输出,我想知道它是可重复的。

这意味着删除对非确定性输入源的访问,例如系统时间或内容不断变化的文件,例如/dev/random.

我查看了 gawk 中的沙盒标志,我认为这不会有帮助,还有ZeroVM

4

2 回答 2

1

我认为一般来说是不可能的。例如,此脚本在运行时将打印不同的值,即使它不依赖于任何输入文件

 awk 'BEGIN{print systime()}'

但是,您可以以功能性、可重复的方式编写脚本,仅依赖输入文件并具有预定义的输出顺序(数组顺序迭代不可预测),不要进行系统调用或使用随机。

于 2016-04-12T19:32:44.960 回答
1

ZeroVM 确实是一种做你想做的事的方法:它将应用程序沙箱化并删除所有非确定性的系统调用。例如,没有阈值(因为它们的调度不可避免会导致不确定性),并且每次执行的时间都从 1970 年 1 月 1 日开始(然后通过某些系统调用将时间提前)。

我没有再安装 ZeroVM 的系统,但是为它编译 awk 应该不难。事实上,我记得busybox 在 ZeroVM 中运行,busybox 有某种形式的 awk

于 2016-04-12T22:16:19.530 回答