Если вы думаете об этом, архитектуры являются абстрактными машинами. Они описывают, как «должен» вести себя кусок тщательно сделанного кремния. Разница между архитектурами и машинами Тьюринга больше зависит от масштаба, чем от фундаментального изменения подхода.
Преимущество машин Тьюринга состоит в том, что существует множество полезных доказательств, которые очень легко сделать с помощью машины Тьюринга. Просто доказать, что любая машина, достаточно мощная, чтобы имитировать машину Тьюринга, может решить любую проблему, которую может сделать машина Тьюринга (да). Однако становится интереснее, когда вы определяете вычислимую функцию . Оказывается, существует множество совместимых определений вычислимой функции. Если вы можете определить все свое поведение как вычислимые функции, вы можете имитироваться на машине Тьюринга.
Допустим, у вас есть архитектура, которая напрямую поддерживает программы в стиле LISP, а другая, например, x86, является более процедурной. Ваш друг утверждает, что «LISP более выразителен, поэтому вы можете писать программы на этом компьютере, которые вы никогда не сможете написать на своем x86». Это жестоко противостоять (тем более что вы, вероятно, недостаточно знаете LISP). Однако вы можете использовать несколько абстрактных машин, таких как машина Тьюринга:
- Ваша машина LISP может быть причудливой, но все, что она может сделать, сводится к лямбда-исчислению. Твой друг нетерпеливо кивает. Лямбда-исчисление - немного культовая вещь для функциональных программистов.
- Мой x86 может быть причудливым, но все, что он может сделать, сводится к машине регистрации. Еще раз, нет вопросов от вашего друга. Регистры - это ТАКая паза в современной компьютерной теории!
- Любая машина регистрации может быть смоделирована как машина Тьюринга, имитирующая эту машину регистрации. Теперь ваш друг задается вопросом, почему вы возвращаетесь к эпохе перфоленты.
- И ваша машина лямбда-исчисления также может быть превращена в машину Тьюринга. * Ваш друг возражает, но вы указываете им на тезис Черча-Тьюринга, и они стыдятся своей головы.
- Таким образом, мой x86-блок может делать все, что может делать ваша модная машина на базе LISP!
Есть, конечно, много других примеров. Было доказано, что игра Жизни Конвея завершена по Тьюрингу, то есть теоретически она может делать все, что может делать ваш компьютер. Самый простой способ сделать это - создать машину Тьюринга в Life . Я поднимаю это, потому что это был бы случай, когда вы называли абстрактную машину трактовкой буквальной архитектуры! Вы можете себе представить, насколько сложно было бы претендовать на вычислимость в Life без помощи абстрактных моделей (я уверен, что, черт возьми, я не моделирую x64 с полным подсмотром кеша, просто чтобы доказать, что Life вычислима!)
В конце концов, большая разница между архитектурами и абстрактными машинами заключается в том, что архитектуры обычно связаны с производительностью. Архитектура хочет знать, как быстро вы можете что-то сделать. Абстрактные машины, как правило, довольствуются только знанием, если можно. Рассмотрим универсальный конструктор, разработанный для конечных автоматов фон Неймана. Этого было достаточно, чтобы доказать, что UC может работать, не говоря уже о том, что у авторов никогда не было достаточно вычислительной мощности, чтобы на самом деле увидеть это.
Ценовая архитектура, которую платят за демонстрацию того, насколько быстро они могут работать, заключается в том, что зачастую очень сложно доказать, что они могут вычислить все . Для этого архитектуры развернулись и начали использовать абстрактные машины.