Se ci pensi, le architetture sono macchine astratte. Descrivono come un grumo di silicio fatto con cura dovrebbe "comportarsi". La differenza tra le architetture e le macchine di Turing è più una questione di scala che un cambiamento fondamentale nell'approccio.
Il vantaggio delle macchine di Turing è che esiste una serie di prove utili che sono molto facili da fare usando una macchina di Turing. È semplice provare che qualsiasi macchina abbastanza potente da simulare una macchina di Turing può risolvere qualsiasi problema che una macchina di Turing può (duh). Tuttavia, diventa più interessante quando si definisce una funzione Computable . Risulta che ci sono molte definizioni compatibili di una funzione computabile. Se puoi definire tutto il tuo comportamento come funzioni computabili, puoi essere simulato in una macchina di Turing.
Quindi diciamo che hai un'architettura che supporta direttamente i programmi in stile LISP, e un'altra come la x86 che è più procedurale. Il tuo amico afferma "LISP è più espressivo, quindi puoi scrivere programmi su questa macchina che non potresti mai scrivere su x86." Questo è brutale da contrastare (specialmente perché probabilmente non conosci abbastanza LISP). Tuttavia, puoi abusare di diverse macchine astratte come la macchina di Turing:
- La tua macchina LISP può essere elegante, ma tutto ciò che può fare è riducibile al calcolo lambda. Il tuo amico annuisce impaziente. Il Lambda calcolo è un po 'una cosa di culto per i programmatori funzionali.
- Il mio x86 può essere elegante, ma tutto ciò che può fare è riducibile a una macchina di registro. Ancora una volta, nessuna domanda da parte del tuo amico. I registri sono così importanti nella moderna teoria dei computer!
- Qualsiasi macchina di registro può essere modellata come una macchina di Turing che simula quella macchina di registro. Ora il tuo amico si chiede perché stai tornando all'era del nastro.
- E la tua calcolatrice lambda può essere ridotta a una macchina di Turing. * Il tuo amico obietta, ma tu punti alla tesi di Church-Turing e loro pendono la testa vergognosi.
- Così la mia x86 box può fare tutto ciò che può fare la vostra fantastica macchina basata su LISP!
Ci sono, naturalmente, molti altri esempi. Il gioco della vita di Conway ha dimostrato di essere completo Turing, il che significa che teoricamente potrebbe fare qualsiasi cosa il tuo computer possa fare. Il modo più semplice per farlo era creare un Turing machine in Life . Ne parlo perché questo sarebbe il caso di ciò che hai definito una macchina astratta trattata come un'architettura letterale! Puoi immaginare quanto sia dura l'affermazione di computabilità nella vita senza l'aiuto di modelli astratti (sono sicuro che non sto modellando un x64, completo di sbirciare nella cache, solo per dimostrare che Life è calcolabile!)
Alla fine, la grande differenza tra architetture e macchine astratte è che le architetture sono solitamente interessate alle prestazioni. Le architetture vogliono sapere quanto velocemente puoi fare qualcosa. Le macchine astratte tendono ad accontentarsi di sapere se è possibile. Considera il Costruttore universale sviluppato per le macchine a stati von Neuman. È stato sufficiente per dimostrare che l'UC potrebbe funzionare, ma che gli autori non hanno mai avuto abbastanza potenza di calcolo per vederlo effettivamente.
Le architetture di prezzo pagano per dimostrare quanto velocemente possono funzionare è che è spesso terribilmente difficile dimostrare di poter calcolare tutto . Per questo, le architetture tornano indietro e iniziano a usare macchine astratte.