Il significato delle parole non è fisso, ma posso darti la mia interpretazione.
Un calcolo è qualcosa con cui calcoliamo nel senso di manipolazione delle equazioni (pensa alla manipolazione delle serie di Taylor o al calcolo degli integrali in analisi). Un calcolo ci dice quali sono le regole di manipolazione, ma non quali dovremmo usare in una determinata situazione.
Un linguaggio di programmazione è qualcosa che ci dice come calcolare. Ci dice esattamente come usare le regole. In genere consentiamo al computer di utilizzare le regole, poiché è molto più veloce. Le regole possono essere non deterministiche e potrebbero esserci ottime ragioni per non essere deterministiche. Può essere nella natura del calcolo che non è deterministico (si pensi a processi di comunicazione simultanei), o fissare una particolare strategia può essere dannoso per le tecniche di implementazione e ottimizzazione.
Ad esempio, il calcolo è una teoria equazionale . Ci sono espressioni ed equazioni che ci dicono quando le espressioni sono uguali. Le equazioni non ci dicono come applicarle, anche se le persone di solito hanno ordini del giorno nascosti e presentano le equazioni in modo che in seguito possano trarre utili strategie di valutazione da esse. Ma nella sua essenza il calcolo λ è un gruppo di equazioni. Non è un linguaggio di programmazione.λλ
Al contrario, Standard ML è un linguaggio di programmazione. Viene dato in termini di semantica operativa, ovvero regole di calcolo. Ci sono nozioni derivate di uguaglianza (equivalenza contestuale, equivalenza osservativa, ecc.) Che possiamo mettere su di essa per pensarla come una sorta di calcolo.
Naturalmente, ci sono spesso utili connecitoni tra un calcolo e la sua manifestazione come linguaggio di programmazione. La normalizzazione confluente è solo un modo per passare dal calcolo al linguaggio di programmazione (anche se purtroppo alcune persone lo hanno trasformato in una specie di religione). L'interazione tra calcoli e linguaggi di programmazione è importante: i linguaggi di programmazione possono essere effettivamente utilizzati, ma i calcoli spiegano di cosa tratta il programma.
Giusto per infastidire le persone, lasciatemi anche affermare che fingere che non ci sia differenza tra un calcolo e la sua manifestazione operativa a volte porta a visioni distorte della programmazione e delle mini-religioni all'interno della comunità di programmazione. Puoi provare a indovinare quale lingua ho in mente. (È un linguaggio molto interessante!)