Коротше кажучи :
Що характеризує імперативні мови програмування як наближені до машин Тьюрінга і до звичайних комп'ютерів, таких як ПК (самі ближче до машин з випадковим доступом (ОЗУ), а не до машини Тьюрінга)) - це концепція явної пам'яті, яку можна змінити для зберігання (проміжні результати ). Це автоматичний вигляд обчислень, з поняттям стану (що включає керування кінцевим станом і вміст пам'яті), яке може змінюватися в міру продовження обчислень.
Більшість інших моделей більш абстрактні. Хоча вони можуть виражати обчислення як послідовність етапів трансформації оригінальної структури, ці перетворення застосовуються у своєрідному вселенському математичному значенні. Це може зберегти такі властивості, як референтна прозорість, що може спростити математичний аналіз. Але це більш віддалено від природних фізичних моделей, які покладаються на конспект пам'яті.
Таким чином, немає природних функціональних машин, за винятком більшого сенсу, як пояснено нижче, оскільки програмне забезпечення насправді не можна відокремити від апаратного.
Посилання на Тьюрінга як мірку обчислюваності виходить, мабуть, з того, що його модель, машина Тьюрінга була найближчою до цього обмеження фізичної реалізації, що зробило його більш інтуїтивно зрозумілою моделлю обчислення.
Подальші міркування :
Існує багато моделей обчислень, які були розроблені для того, щоб максимально загальноприйняти концепцію обчислення. Вони включають машини Тьюрінга, фактично в різних ароматах, обчислення лямбда (також ароматизатори), напівтуеві системи переписування, часткову рекурсивну функцію, комбінаторну логіку.
Всі вони відображають деякі аспекти різних методик, які використовуються математиками для вираження чи проведення обчислень. І більшість з них певною мірою використовуються як основа деяких мов програмування (наприклад, Snobol для систем переписування, APL для комбінаторів, Lisp / Схема для лямбда-числення) і часто можуть поєднуватися різними способами в сучасних мовах програмування.
Одним з головних результатів є те, що всі ці обчислювальні моделі виявилися рівнозначними, що призводить до тези Церкви Тьюрінга, що жодна фізично реалізована модель обчислень не може зробити більше, ніж будь-яка з цих моделей. Модель обчислень вважається Тюрінгом завершеною, якщо можна довести, що вона є еквівалентною одній із цих моделей, отже, рівнозначною для всіх.
Назва могла бути різною. Вибір машини Тюрінга (ТМ) як еталону, ймовірно, пов'язаний з тим, що це, мабуть, найпростіша з цих моделей, імітуючи уважно (хоча й спрощено) спосіб обчислення людини і досить простий у здійсненні (в обмеженій обмеженій формі) ) як фізичний пристрій, настільки, що машини Тьюрінга були побудовані з наборами Lego . Основна ідея не вимагає математичної витонченості. Ймовірно, простота та реалізація моделі надали їй таке референтне положення.
У той час, коли Алан Тьюрінг створив свій обчислювальний пристрій, на столі були складені інші пропозиції, які слугували формальним визначенням обчислюваності, що є вирішальним питанням для основ математики (див.
Entscheidungsproblem ). Пропозиція Тьюрінга тогочасними експертами розглядалася як одна з найбільш переконливо охоплених відомих робіт щодо того, якою має бути обчислюваність (див. « Обчислюваність та рекурсія» , Р. І. Соаре, 1996, див. Розділ 3.2). Різні пропозиції виявилися рівнозначними, але Тьюрінг був більш переконливим. [з коментарів Юваля Філімуса]
Слід зазначити, що, з апаратної точки зору, наші комп'ютери - це не машини Тьюрінга, а скоріше те, що називається машинами з випадковим доступом (ОЗП) , які також є Тьюрінгом завершеними.
Очевидно імперативна мова (що б це не означало) - це, мабуть, формалізми, які використовуються для найпростіших моделей, таких як машини Тюрінга, або мова складання (пропускаючи її двійкове кодування) комп'ютерів. І те й інше, як відомо, не читає і дуже важко писати значні програми. Насправді навіть мова збірки має деякі функції вищого рівня, щоб полегшити програмування трохи порівняно з прямим використанням інструкцій на машині. Основні імперативні моделі закриті для фізичних світів, але не дуже зручні.
Це швидко призвело до розробки моделей обчислень вищого рівня, які почали змішувати до нього різноманітні обчислювальні методи, такі як виклики підпрограми та функцій, іменування місця пам'яті, розміщення імен, кількісне визначення та фіктивні змінні, які вже використовуються в певній формі в математиці та логіці і навіть дуже абстрактних поняттях, таких як рефлексія ( Lisp 1958).
Класифікація мов програмування на парадигмі програмування, таких як імперативна, функціональна, логічна, об'єктно-орієнтована, ґрунтується на перевазі деяких із цих прийомів у дизайні мови, а також наявності чи відсутності деяких обчислювальних функцій, що застосовують деякі властивості програм або фрагменти програми, написані мовою.
Деякі моделі зручні для фізичних машин. Деякі інші зручніші для опису алгоритмів на високому рівні, це може залежати від типу алгоритму, який слід описати. Деякі теоретики навіть використовують недетерміновану специфікацію алгоритмів і навіть цей cn перекладають у більш звичайних термінах програмування. Але проблеми невідповідності немає, тому що ми розробили складну технологію компілятора / інтерпретатора, яка може перевести кожну модель в іншу за потребою (що також є основою тези Церкви-Тьюрінга).
Тепер ви ніколи не повинні дивитися на комп'ютер як на сире обладнання. Він містить булеву схему, яка робить дуже елементарну обробку. Але значна частина цього рухається мікропрограмами всередині комп'ютера, про які ви ніколи не дізнаєтесь. Тоді у вас є операційна система, яка змушує ваш комп'ютер виглядати навіть інакше, ніж апаратне забезпечення. Крім того, у вас може бути віртуальна машина, яка виконує байт-код, а потім мова високого рівня, наприклад, Pyva і Jathon, або Haskell або OCaml, який можна скласти в байт-код.
На кожному рівні ви бачите іншу модель обчислень. Дуже важко відокремити апаратний рівень від програмного рівня, таким чином призначити машині конкретну обчислювальну модель. І оскільки вони всі перекладаються, ідея про остаточну модель обчислення апаратних засобів є в значній мірі ілюзією.
Машина обчислення лямбда існує: це комп’ютер, який може зменшити вираження лямбда-числення. Оголошення, яке легко зробити.
Про спеціалізовані машинні архітектури
Насправді, доповнюючи відповідь Пітера Тейлора та слідкуючи за переплетенням апаратних та програмних засобів, були створені спеціалізовані машини, які краще адаптувались до певної парадигми, і їх основне програмне забезпечення було написане мовою програмування, заснованої на цій парадигмі.
До них належать
По суті, це також імперативні апаратні структури, але їх пом'якшення за допомогою спеціальних функцій програмного забезпечення або мікропрограмованих інтерпретаторів для кращої адаптації до передбачуваної парадигми.
Насправді, апаратне забезпечення, що спеціалізується на конкретних парадигмах, здається, ніколи не було успішним у довгостроковій перспективі. Причина полягає в тому, що технологія компіляції для впровадження будь-якої парадигми на ванільне обладнання ставала все більш ефективною, так що спеціалізована апаратура була не так потрібна. Крім того, продуктивність програмного забезпечення швидко покращувалася, але витрати на вдосконалення (включаючи еволюцію базового програмного забезпечення) легше амортизувалися на ванільне обладнання, ніж на спеціалізоване обладнання. Спеціалізоване обладнання не могло конкурувати в довгостроковій перспективі.
Тим не менше, і хоча я не маю точних даних щодо цього, я б підозрював, що ці підприємства залишили деякі ідеї, які впливали на еволюцію машин, пам'яті та набір інструкцій.
(a -> a) -> a
.