Запуск awk детерминирован

Я ищу способ запуска awk поддающимся проверке детерминированным способом, то есть результат должен определяться только входными данными. Другими словами, учитывая, что у программы есть вывод, я хочу знать, что он повторяется.

Это будет означать удаление доступа к недетерминированным источникам ввода, таким как системное время или файлы с изменяющимся содержимым, таким как /dev/random,

Я посмотрел на флаг песочницы в gawk, который, я думаю, не поможет, и на ZeroVM.

2 ответа

ZeroVM действительно был бы способом сделать то, что вы хотите: он помещает в песочницу приложения и удаляет все недетерминированные системные вызовы. В качестве примера, нет threds (так как их планирование неизбежно приводит к недетерминизму), и время начинается с 1 января 1970 года для каждого выполнения (время затем увеличивается определенными системными вызовами).

У меня больше нет системы с установленным ZeroVM, но для нее не должно быть проблем с компиляцией awk. На самом деле, я помню, что busybox работал в ZeroVM, а busybox имеет некоторую форму awk.

Я не думаю, что это возможно в целом. Например, этот скрипт будет печатать разные значения при запуске, даже если он не зависит от входного файла

 awk 'BEGIN{print systime()}'

Однако вы можете писать свои сценарии функциональным, воспроизводимым способом, чтобы зависеть только от входного файла и иметь предопределенный порядок вывода (итерация порядка массива не предсказуема), не выполнять системные вызовы или использовать случайные.

Другие вопросы по тегам