In breve :
Ciò che caratterizza i linguaggi di programmazione imperativa vicini alle macchine di Turing e ai normali computer come i PC (più vicini alle macchine ad accesso casuale (RAM) piuttosto che alle macchine di Turing) è il concetto di memoria esplicita che può essere modificata per memorizzare (risultati intermedi ). È una vista automatica del calcolo, con un concetto di uno stato (comprendente sia il controllo dello stato finito che il contenuto della memoria) che può cambiare man mano che il calcolo procede.
La maggior parte degli altri modelli sono più astratti. Sebbene possano esprimere il calcolo come una successione di fasi di trasformazione di una struttura originale, queste trasformazioni sono applicate in una sorta di universo intemporale di significati matematici. Ciò può preservare proprietà, come la trasparenza referenziale, che possono semplificare l'analisi matematica. Ma è più remoto dai modelli fisici naturali che si basano sul concpet della memoria.
Pertanto non esistono macchine funzionali naturali, se non in un senso più ampio, come spiegato di seguito, poiché il software non è realmente separabile dall'hardware.
Il riferimento a Turing come parametro di computabilità deriva probabilmente dal fatto che il suo modello, la macchina di Turing, era il più vicino a questo vincolo di realizzabilità fisica, che lo rendeva un modello di calcolo più intuitivo.
Ulteriori considerazioni :
Esistono molti modelli di calcolo, progettati per catturare nel modo più generale possibile il concetto di calcolo. Includono macchine di Turing, in realtà in molti gusti diversi, il calcolo lambda (anche sapori), sistemi di riscrittura semi-Thue, funzione ricorsiva parziale, logica combinatoria.
Tutti catturano alcuni aspetti delle varie tecniche utilizzate dai matematici per esprimere o condurre calcoli. E la maggior parte sono stati usati in una certa misura come base per la progettazione di alcuni linguaggi di programmazione (ad es. Snobol per sistemi di riscrittura, APL per combinatori, Lisp / Scheme per calcolo lambda) e spesso possono essere combinati in diversi modi nei moderni linguaggi di programmazione.
Un risultato importante è che tutti questi modelli di calcolo sono stati dimostrati equivalenti, il che porta alla tesi Church-Turing secondo cui nessun modello di calcolo fisicamente realizzabile può fare di più di qualsiasi di questi modelli. Un modello di calcolo è detto Turing completo se si può dimostrare di essere equivalente a uno di questi modelli, quindi equivalente a tutti loro.
Il nome avrebbe potuto essere diverso. La scelta della macchina di Turing (TM) come riferimento è probabilmente dovuta al fatto che è probabilmente il più semplice di questi modelli, imitando da vicino (anche se semplicisticamente) il modo in cui un essere umano calcola e abbastanza facile da implementare (in una forma limitata limitata ) come dispositivo fisico, a tal punto che le macchine Turing sono state costruite con set Lego . L'idea di base non richiede sofisticazione matematica. È probabilmente la semplicità e la realizzabilità del modello a dargli questa posizione di riferimento.
Al momento in cui Alan Turing ha creato il suo dispositivo di elaborazione, altre proposte erano sul tavolo per servire come definizione formale di calcolabilità, una questione cruciale per le basi della matematica (vedi il problema di
Entscheidungs ). La proposta di Turing è stata considerata dagli esperti dell'epoca come il lavoro più convincente che comprende in modo convincente quale dovrebbe essere la calcolabilità (vedi Computabilità e ricorsione , RI Soare, 1996, vedere la sezione 3.2). Le varie proposte si sono dimostrate equivalenti, ma quelle di Turing sono state più convincenti. [dai commenti di Yuval Filmus]
Va notato che, da un punto di vista hardware, i nostri computer non sono macchine Turing, ma piuttosto ciò che viene chiamato Random Access Machines (RAM) , che sono anche Turing completi.
Il linguaggio puramente imperativo (qualunque cosa ciò possa significare) sono probabilmente i formalismi utilizzati per i modelli più elementari, come le macchine di Turing, o il linguaggio assembly (saltando la sua codifica binaria) dei computer. Entrambi sono notoriamente illeggibili e con cui è molto difficile scrivere programmi significativi. In realtà, anche il linguaggio assembly ha alcune funzionalità di livello superiore per facilitare un po 'la programmazione, rispetto all'uso diretto delle istruzioni della macchina. I modelli imperativi di base sono chiusi ai mondi fisici, ma non molto utilizzabili.
Ciò ha portato rapidamente allo sviluppo di modelli di calcolo di livello superiore, che hanno iniziato a mescolarvi una varietà di tecniche computazionali, come sottoprogrammi e chiamate di funzione, denominazione della posizione della memoria, ambito di nomi, quantificazione e variabili fittizie, già utilizzate in qualche forma in matematica e logica, e anche concetti molto astratti come la riflessione ( Lisp 1958).
La classificazione dei linguaggi di programmazione in paradigma di programmazione come imperativo, funzionale, logico, orientato agli oggetti si basa sulla preminenza di alcune di queste tecniche nella progettazione del linguaggio e sulla presenza o assenza di alcune funzionalità di elaborazione che impongono alcune proprietà per i programmi o frammenti di programma scritti nella lingua.
Alcuni modelli sono convenienti per macchine fisiche. Alcuni altri sono più convenienti per una descrizione di alto livello degli algoritmi, che può dipendere dal tipo di algoritmo che deve essere descritto. Alcuni teorici usano persino specifiche non deterministiche degli algoritmi, e persino questo può essere tradotto in termini di programmazione più convenzionali. Ma non vi è alcun problema di discrepanza, perché abbiamo sviluppato una sofisticata tecnologia di compilatore / interprete che può tradurre ogni modello in un altro secondo necessità (che è anche la base della tesi di Church-Turing).
Ora, non dovresti mai guardare il tuo computer come hardware grezzo. Contiene circuiti booleani che elaborano in modo molto elementare. Ma gran parte di esso è guidato da micro-programmi all'interno del computer di cui non si arriva mai a conoscenza. Quindi hai il sistema operativo che fa apparire la tua macchina anche diversa da quella dell'hardware, inoltre potresti avere una macchina virtuale che esegue il codice byte e quindi un linguaggio di alto livello come Pyva e Jathon o Haskell o OCaml, che può essere compilato in codice byte.
Ad ogni livello viene visualizzato un modello di calcolo diverso. È molto difficile separare il livello hardware dal livello software, quindi assegnare un modello computazionale specifico a una macchina. E poiché sono tutti intercambiabili, l'idea di un modello di calcolo hardware definitivo è praticamente un'illusione.
La macchina per il calcolo lambda esiste: è un computer in grado di ridurre le espressioni del calcolo lambda. Annuncio che è facile da fare.
Informazioni su architetture di macchine specializzate
In realtà, integrando la risposta di Peter Taylor e dando seguito all'intreccio hardware / software, sono state prodotte macchine specializzate per adattarsi meglio a un paradigma specifico e il loro software di base è stato scritto in un linguaggio di programmazione basato su quel paradigma.
Questi includono
Fondamentalmente, queste sono anche strutture hardware imperative, ma mitigate con speciali funzioni hardware o interpreti microprogrammati per adattarsi meglio al paradigma desiderato.
In realtà, l'hardware specializzato per paradigmi specifici non sembra aver mai avuto successo nel lungo periodo. Il motivo è che la tecnologia di compilazione per implementare qualsiasi paradigma sull'hardware vanilla è diventata sempre più efficace, quindi l'hardware specializzato non era tanto necessario. Inoltre, le prestazioni dell'hardware sono state in rapido miglioramento, ma il costo del miglioramento (inclusa l'evoluzione del software di base) è stato più facilmente ammortizzato sull'hardware vanilla che sull'hardware specializzato. L'hardware specializzato non potrebbe competere a lungo termine.
Tuttavia, e anche se non ho dati precisi su questo, sospetterei che queste iniziative abbiano lasciato alcune idee che hanno influenzato l'evoluzione delle macchine, dei ricordi e dell'architettura dei set di istruzioni.
(a -> a) -> a
.