Jika Anda memikirkannya, arsitektur adalah mesin abstrak. Mereka menggambarkan bagaimana gumpalan silikon yang dibuat dengan hati-hati "harus" berperilaku. Perbedaan antara arsitektur dan mesin Turing lebih merupakan masalah skala daripada perubahan mendasar dalam pendekatan.
Keuntungan dari mesin Turing adalah bahwa ada satu set bukti berguna yang sangat mudah dilakukan dengan menggunakan mesin Turing. Mudah untuk membuktikan bahwa mesin apa pun yang cukup kuat untuk mensimulasikan mesin Turing dapat menyelesaikan masalah yang dapat dilakukan mesin Turing (duh). Namun, itu menjadi lebih menarik ketika Anda mendefinisikan fungsi yang dapat dihitung . Ternyata ada banyak definisi yang kompatibel dari fungsi yang dapat dihitung. Jika Anda dapat mendefinisikan semua perilaku Anda sebagai fungsi yang dapat dihitung, Anda dapat disimulasikan dalam mesin Turing.
Jadi katakanlah Anda memiliki arsitektur yang secara langsung mendukung program gaya LISP, dan yang lain seperti x86 yang lebih prosedural. Teman Anda mengklaim "LISP lebih ekspresif, sehingga Anda dapat menulis program di mesin ini yang tidak akan pernah Anda tulis di x86 Anda." Ini brutal untuk dilawan (terutama karena Anda mungkin tidak cukup tahu LISP). Namun, Anda dapat menyalahgunakan beberapa mesin abstrak seperti mesin Turing:
- Mesin LISP Anda mungkin mewah, tetapi semua yang dapat dilakukannya dapat direduksi menjadi kalkulus lambda. Temanmu mengangguk dengan penuh semangat. Kalkulus Lambda adalah sedikit pemujaan bagi pemrogram fungsional.
- X86 saya mungkin mewah, tetapi semua yang dapat dilakukan dapat direduksi ke mesin register. Sekali lagi, tidak ada pertanyaan dari teman Anda. Register adalah SO pase dalam teori komputer modern!
- Mesin register apa pun dapat dimodelkan sebagai mesin Turing yang mensimulasikan mesin register itu. Sekarang teman Anda bertanya-tanya mengapa Anda mengingat kembali ke era punch-tape.
- Dan mesin kalkulus lambda Anda dapat dikurangi menjadi mesin Turing juga. * Teman Anda keberatan, tetapi Anda mengarahkan mereka pada tesis Church-Turing, dan mereka menundukkan kepala karena malu.
- Jadi kotak x86 saya dapat melakukan apa saja yang dapat dilakukan oleh mesin berbasis LISP mewah Anda!
Tentu saja ada banyak contoh lain. Permainan Kehidupan Conway terbukti lengkap, artinya secara teoretis dapat melakukan apa pun yang dapat dilakukan komputer Anda. Cara termudah untuk melakukan ini adalah membangun mesin Turing dalam Kehidupan . Saya mengemukakan ini karena ini adalah kasus yang Anda sebut mesin abstrak yang diperlakukan sebagai arsitektur literal! Anda dapat membayangkan betapa sulitnya klaim komputabilitas dalam Kehidupan tanpa bantuan model abstrak (saya yakin tidak memodelkan x64, lengkap dengan cache yang mengintip, hanya untuk membuktikan bahwa Life dapat dihitung!)
Pada akhirnya, perbedaan besar antara arsitektur dan mesin abstrak adalah bahwa arsitektur biasanya berkaitan dengan kinerja. Arsitektur ingin tahu seberapa cepat Anda dapat melakukan sesuatu. Mesin abstrak cenderung puas hanya dengan mengetahui jika Anda bisa. Pertimbangkan Konstruktor Universal yang dikembangkan untuk mesin negara von Neuman. Itu sudah cukup untuk membuktikan bahwa UC dapat bekerja, tidak peduli bahwa penulis tidak pernah memiliki kekuatan komputasi yang cukup untuk benar-benar melihatnya.
Harga arsitektur membayar untuk menunjukkan seberapa cepat mereka dapat bekerja adalah bahwa seringkali sangat sulit untuk membuktikan bahwa mereka dapat menghitung semuanya . Untuk itu, arsitektur berbalik kembali dan mulai menggunakan mesin abstrak.