Se você pensar bem, arquiteturas são máquinas abstratas. Eles descrevem como um pedaço de silício feito com cuidado "deve" se comportar. A diferença entre as arquiteturas e as máquinas de Turing é mais uma questão de escala do que uma mudança fundamental na abordagem.
A vantagem das máquinas de Turing é que há um conjunto de provas úteis que são muito fáceis de fazer usando uma máquina de Turing. É simples provar que qualquer máquina poderosa o suficiente para simular uma máquina de Turing pode resolver qualquer problema que uma máquina de Turing possa (duh). No entanto, fica mais interessante quando você define uma função computável . Acontece que existem muitas definições compatíveis de uma função computável. Se você pode definir todo o seu comportamento como funções computáveis, pode ser simulado em uma máquina de Turing.
Então, digamos que você tenha uma arquitetura que suporte diretamente programas no estilo LISP e outra como o x86, que é mais processual. Seu amigo afirma "O LISP é mais expressivo; portanto, você pode escrever programas nesta máquina que nunca poderia escrever no seu x86". Isso é brutal de combater (especialmente porque você provavelmente não conhece o suficiente LISP). No entanto, você pode abusar de várias máquinas abstratas, como a máquina de Turing:
- Sua máquina LISP pode ser sofisticada, mas tudo o que pode fazer é redutível ao cálculo lambda. Seu amigo assente ansiosamente. O cálculo Lambda é um pouco culto para programadores funcionais.
- Meu x86 pode ser sofisticado, mas tudo o que pode fazer é redutível a uma máquina de registro. Mais uma vez, nenhuma pergunta do seu amigo. Os registros são tão rápidos na teoria moderna dos computadores!
- Qualquer máquina de registro pode ser modelada como uma máquina de Turing que simula essa máquina de registro. Agora, seu amigo se pergunta por que você está voltando à era da fita adesiva.
- E sua máquina de cálculo lambda também pode ser reduzida a uma máquina de Turing. * Seu amigo se opõe, mas você os aponta para a tese de Church-Turing, e eles ficam com a cabeça envergonhados.
- Assim, minha caixa x86 pode fazer qualquer coisa que sua máquina sofisticada baseada em LISP possa fazer!
Obviamente, existem muitos outros exemplos. O Jogo da Vida de Conway provou ser Turing completo, o que significa que teoricamente ele poderia fazer qualquer coisa que seu computador pudesse fazer. A maneira mais fácil de fazer isso era construir uma máquina de Turing na Life . Trago isso à tona porque esse seria um caso do que você chamou de máquina abstrata sendo tratada como uma arquitetura literal! Você pode imaginar o quão difícil seria a afirmação de computabilidade na Life sem a ajuda de modelos abstratos (com certeza não estou modelando um x64, completo com uma espiada no cache, apenas para provar que a vida é computável!)
No final, a grande diferença entre arquiteturas e máquinas abstratas é que as arquiteturas geralmente se preocupam com o desempenho. As arquiteturas querem saber com que rapidez você pode fazer alguma coisa. Máquinas abstratas tendem a se contentar em apenas saber se você pode. Considere o Construtor Universal desenvolvido para máquinas de estado von Neuman. Foi o suficiente para provar que a UC poderia funcionar, não importa que os autores nunca tivessem poder de computação suficiente para realmente consegui-la.
As arquiteturas de preços pagam para demonstrar a rapidez com que podem trabalhar é que muitas vezes é terrivelmente difícil provar que elas podem calcular tudo . Para isso, as arquiteturas voltam e começam a usar máquinas abstratas.