Jeśli się nad tym zastanowić, architektury to abstrakcyjne maszyny. Opisują, jak powinien zachowywać się kawałek starannie wykonanego krzemu. Różnica między architekturą a maszynami Turinga jest bardziej kwestią skali niż zasadniczej zmiany podejścia.
Zaletą maszyn Turinga jest to, że istnieje zestaw przydatnych dowodów, które są bardzo łatwe do wykonania przy użyciu maszyny Turinga. Łatwo jest udowodnić, że każda maszyna wystarczająco mocna, aby symulować maszynę Turinga, może rozwiązać każdy problem, który może ona zrobić (duh). Jednak staje się bardziej interesujące, gdy zdefiniujesz funkcję obliczalną . Okazuje się, że istnieje wiele zgodnych definicji funkcji obliczalnej. Jeśli potrafisz zdefiniować wszystkie swoje zachowania jako funkcje obliczalne, możesz być symulowany w maszynie Turinga.
Powiedzmy, że masz architekturę, która bezpośrednio obsługuje programy w stylu LISP, a inną, taką jak x86, która jest bardziej proceduralna. Twój przyjaciel twierdzi, że „LISP jest bardziej ekspresyjny, więc możesz pisać programy na tym komputerze, których nigdy nie możesz pisać na swoim x86”. Jest to brutalne, aby temu zaradzić (zwłaszcza, że prawdopodobnie nie znasz wystarczająco dużo LISP). Można jednak nadużywać kilka abstrakcyjnych maszyn, takich jak maszyna Turinga:
- Twoja maszyna LISP może być fantazyjna, ale wszystko, co może zrobić, można sprowadzić do rachunku lambda. Twój przyjaciel chętnie kiwa głową. Rachunek lambda to kultowa rzecz dla programistów funkcjonalnych.
- Mój x86 może być fantazyjny, ale wszystko, co może zrobić, można zredukować do maszyny rejestrującej. Jeszcze raz, żadne pytanie od twojego przyjaciela. Rejestry są SO we współczesnej teorii komputerów!
- Dowolną maszynę rejestrującą można modelować jako maszynę Turinga symulującą tę maszynę rejestrującą. Teraz twój przyjaciel zastanawia się, dlaczego wracasz do ery taśm.
- A twoją maszynę do rachunku lambda można również zredukować do maszyny Turinga. * Twój przyjaciel sprzeciwia się, ale wskazujesz go na tezę Turinga Kościoła, a oni zawstydzają głowę.
- Tak więc moje pudełko x86 może zrobić wszystko, co może zrobić Twoja wymyślna maszyna oparta na LISP!
Istnieje oczywiście wiele innych przykładów. Udowodniono, że gra Conway Game of Life jest ukończona, co oznacza, że teoretycznie może zrobić wszystko, co może zrobić komputer. Najłatwiejszym sposobem na to było zbudowanie maszyny Turinga w życiu . Mówię o tym, ponieważ byłby to przypadek, który nazwałeś abstrakcyjną maszyną traktowaną jako dosłowna architektura! Możesz sobie wyobrazić, jak trudne byłoby twierdzenie o obliczalności w Life bez pomocy abstrakcyjnych modeli (jestem pewien, że do cholery nie modeluję x64, wraz z podglądaniem pamięci podręcznej, tylko po to, aby udowodnić, że Życie jest obliczalne!)
Ostatecznie duża różnica między architekturami a maszynami abstrakcyjnymi polega na tym, że architektury zwykle zajmują się wydajnością. Architekci chcą wiedzieć, jak szybko możesz coś zrobić. Maszyny abstrakcyjne zazwyczaj zadowalają się wiedzą, czy potrafisz. Zastanów się nad Universal Constructor opracowanym dla automatów stanowych von Neumana. To wystarczyło, aby udowodnić, że UC może działać, nieważne jednak, że autorzy nigdy nie mieli wystarczającej mocy obliczeniowej, aby to przejrzeć.
Architekci cen płacą za wykazanie, jak szybko potrafią pracować, ponieważ często bardzo trudno jest udowodnić, że potrafią wszystko obliczyć . W tym celu architektury skręcają w prawo i zaczynają korzystać z abstrakcyjnych maszyn.