Вот это поворот: комбинация команд find и mkdir из GNU оказалась тьюринг-полной
Новости Отредактировано
Как ни странно, даже самые простые команды вроде find и mkdir в bash-скриптах могут скрывать в себе неожиданные секреты
350 открытий6К показов
В мире программирования команды find
и mkdir
из пакета GNU давно используются для управления файловой системой.
Однако недавнее открытие показало, что сочетание этих команд может достичь тьюринг-полноты. Это означает, что они способны имитировать поведение любой другой вычислительной системы, включая выполнение сложных алгоритмов и программ.
Доказательство
Исследователи показали тьюринг-полноту комбинации команд find
и mkdir
с помощью реализации систем тегов (tag systems).
Система тегов — это триплет (m, A, P), где m — положительное целое число, A — конечный алфавит, включающий символ завершения H, и P — правило производства для каждого символа алфавита.
Конструкция цикла
Простейшая демонстрация заключается в создании бесконечного цикла:
Эта команда рекурсивно создает каталоги, попадая в бесконечный цикл. Для ограничения глубины создания каталогов можно использовать опцию -maxdepth
:
Пример FizzBuzz
Используя опцию -regex
команды find
, можно фильтровать имена файлов и выполнять действия в зависимости от результата:
Этот код создает иерархию каталогов, где выводится FizzBuzz
, если количество каталогов кратно 15, Buzz
— если кратно 5, Fizz
— если кратно 3, и количество каталогов в противном случае.
Реализация систем тегов
Системы тегов — это пример, показывающий, как можно реализовать тьюринг-полный механизм с помощью команд find
и mkdir
. В данном примере используется система тегов с m = 2 и алфавитом из четырех символов.
Этот код демонстрирует, как с помощью комбинации команд find
и mkdir
можно реализовать тьюринг-полную систему тегов.
350 открытий6К показов