Якщо ви подумаєте над цим, архітектури - це абстрактні машини. Вони описують, як повинен поводитися грудочка ретельно виготовленого кремнію. Різниця між архітектурами та машинами Тьюрінга - це скоріше питання масштабу, ніж фундаментальний зсув у підході.
Перевага машин Тьюрінга полягає в тому, що існує безліч корисних доказів, які дуже легко зробити за допомогою машини Тюрінга. Неважко довести, що будь-яка машина, достатньо потужна для імітації машини Тьюрінга, може вирішити будь-яку проблему, яку може машина Тьюрінга (так). Однак це стає цікавішим, коли ви визначаєте функцію " Обчислювальна система" . Виявляється, існує багато сумісних визначень обчислюваної функції. Якщо ви можете визначити всю свою поведінку як обчислювані функції, ви можете імітувати в машині Тьюрінга.
Скажімо, у вас є архітектура, яка безпосередньо підтримує програми стилю LISP, та інша, як x86, яка є більш процедурною. Ваш друг стверджує, що "LISP є більш виразним, тому ви можете писати програми на цій машині, які ви ніколи не могли написати на своєму x86". Це жорстоко протидіяти (тим більше, що ви, мабуть, не знаєте достатньо LISP). Однак ви можете зловживати кількома абстрактними машинами, такими як машина Тюрінга:
- Ваш LISP-апарат може бути фантазійним, але все, що він може зробити, можна звести до обчислення лямбда. Ваш друг нетерпляче киває. Обчислення лямбда - це культова річ для функціональних програмістів.
- Мій x86 може бути фантазійним, але все, що він може зробити, можна звести до машини реєстрації. Ще раз, жодного питання від вашого друга. У сучасній теорії комп’ютерів регістри - це ТАК!
- Будь-яка реєстраційна машина може бути змодельована як машина Тьюрінга, що імітує цю реєстраційну машину. Тепер твій друг цікавиться, чому ти повертаєшся до епохи ударних стрічок.
- А ваш апарат для обчислення лямбда можна також звести до машини Тьюрінга. * Ваш друг заперечує, але ви вказуєте їх на тезу Церкви Тьюрінга, і вони соромлять голову.
- Таким чином, мій блок x86 може робити все, що може зробити ваш фантазійний апарат на базі LISP!
Звичайно, є багато інших прикладів. Гра Життя Конуея була доведена як Тюрінг повною, тобто теоретично вона могла зробити все, що може зробити ваш комп’ютер. Найпростіший спосіб зробити це - побудувати машину Тюрінга в Life . Я доводжу це, тому що це був би випадок того, що ви назвали абстрактною машиною, яка трактується як буквальна архітектура! Ви можете собі уявити, наскільки важким було б твердження про обчислюваність у Life без допомоги абстрактних моделей (я впевнений, що, як чорт, не моделює x64, у комплекті з визирним кешем, просто для того, щоб довести, що життя обчислюється!)
Зрештою, велика різниця між архітектурами та абстрактними машинами полягає в тому, що архітектури зазвичай стосуються продуктивності. Архітектури хочуть знати, наскільки швидко ви можете щось зробити. Абстрактні машини, як правило, задоволені лише знанням того, чи зможете ви. Розглянемо універсальний конструктор, розроблений для державних машин фон Неймана. Це було досить, щоб довести, що UC може працювати, не маючи на увазі, що автори ніколи не мали достатньо обчислювальної потужності, щоб насправді це побачити.
Цінова архітектура платить за демонстрацію того, як швидко вони можуть працювати, це те, що часто буває дуже важко довести, що вони можуть все обчислити . Для цього архітектури повертаються направо назад і починають використовувати абстрактні машини.