La lettera greca λ (lambda minuscola) è un simbolo non ufficiale dell'ambito di ricerca sui linguaggi di programmazione, proveniente dal lambda calcolo di Church, un modello teorico introdotto negli anni '30 e molto usato dai ricercatori. Decora la copertina di testi classici come Structure and Interpretation of Computer Programs e appare nel titolo dei cosiddetti Lambda Papers, scritti da Gerald Jay Sussman e Guy Steele, sviluppatori di Scheme.

La teoria dei linguaggi di programmazione è un settore della scienza informatica che si occupa della progettazione, dell'implementazione, dell'analisi, della caratterizzazione e della classificazione dei linguaggi di programmazione e dei loro componenti. Pur essendo propriamente una branca dell'informatica, dove è piuttosto nota, essa è in rapporto d'influenza reciproca con la matematica, l'ingegneria del software e linguistica. La ricerca nel campo è attiva e produce risultati pubblicati sia nelle diverse riviste scientifiche ad essa dedicate, sia in altre pubblicazioni più generali di informatica e ingegneria.

Storia

[modifica | modifica wikitesto]

La storia della teoria dei linguaggi di programmazione precede, per certi versi, lo sviluppo degli stessi linguaggi. Alcuni ritengono infatti che il lambda calcolo, creato da Alonzo Church e Stephen Cole Kleene negli anni 1930 come modello di calcolo in senso astratto, e non come un mezzo per descrivere algoritmi ad un calcolatore, costituisca in realtà il primo linguaggio di programmazione della storia. Diversi linguaggi di programmazione funzionali moderni vengono appunto descritti come un «sottile rivestimento» al lambda calcolo[1] o essere spiegati attraverso di esso.

Il primo linguaggio di programmazione mai inventato è il Plankalkül, progettato da Konrad Zuse negli anni '40, ma reso pubblico soltanto nel 1972 e implementato per la prima volta addirittura nel 1998. Il primo linguaggio che abbia avuto ampio riconoscimento e successo è invece il Fortran, che venne sviluppato tra il 1954 e il 1957 da una squadra di ricercatori dell'IBM guidata da John Backus. Il successo di Fortran portò alla formazione di un comitato di scienziati avente l'obiettivo di creare un linguaggio per calcolatori «universale» e che produsse l'ALGOL 58. Presso il MIT invece, John McCarthy sviluppò indipendentemente e ispirato dal lambda calcolo il linguaggio Lisp, il primo linguaggio accademico di successo. A partire da tali contributi iniziali, dagli anni '60 in poi i linguaggi di programmazione diventarono un tema di ricerca attivo.

Si riportano di seguito alcune tappe chiave successive nella storia della teoria dei linguaggi di programmazione.

Anni '50

[modifica | modifica wikitesto]

Anni '60

[modifica | modifica wikitesto]

Anni '70

[modifica | modifica wikitesto]

Anni '80

[modifica | modifica wikitesto]

Anni '90

[modifica | modifica wikitesto]

Sotto-discipline e campi di ricerca correlati

[modifica | modifica wikitesto]

Numerosi sono gli ambiti di studio che influenzano profondamente o sono influenzati dalla teoria dei linguaggi di programmazione, molti dei quali con vaste aree di sovrapposizione. Questa disciplina, infatti, si avvale di diverse altre branche della matematica, come la teoria della calcolabilità, quella delle categorie e quella degli insiemi.

Semantica formale

[modifica | modifica wikitesto]

La semantica formale è la specifica formale, appunto, del comportamento dei programmi e dei linguaggi stessi. I tre approcci più comuni per descrivere il significato di un programma sono quello denotazionale, quello operazionale e quello assiomatico.

Teoria dei tipi

[modifica | modifica wikitesto]

La teoria dei tipi è lo studio dei sistemi di tipo, un metodo sintattico e trattabile da un calcolatore per dimostrare l'assenza di certi comportamenti dei programmi tramite la classificazione dei costrutti secondo i valori che essi calcolano.[3] Molti linguaggi di programmazione sono distinguibili dalle caratteristiche dei loro sistemi di tipi.

Analisi e trasformazione di programmi

[modifica | modifica wikitesto]

L'analisi di programmi consiste nel problema di determinazione, a partire da un esame sintattico, di certe caratteristiche chiave di un programma, come l'assenza di certe classi di errori. La trasformazione di programmi si occupa invece dei processi di manipolazione di un programma da una forma, o linguaggio, ad un'altra.

Analisi comparata di linguaggi di programmazione

[modifica | modifica wikitesto]

L'analisi comparata dei linguaggi di programmazione mira a classificare questi ultimi secondo diverse tipologie a seconda delle loro caratteristiche. Una nota macro-categorizzazione ad esempio, è quella che distingue i linguaggi secondo il paradigma di programmazione.

Metaprogrammazione e programmazione generica

[modifica | modifica wikitesto]

La Metaprogrammazione è la generazione di programmi di ordine superiore la cui esecuzione produce in output dei programmi, eventualmente espressi in un altro linguaggio o in un sottoinsieme di quello di partenza.

Linguaggi di dominio specifico

[modifica | modifica wikitesto]

I linguaggi di dominio specifico sono linguaggi concepiti per risolvere in maniera efficiente certi problemi propri di un ambito di applicazione particolare.

Costruzione di compilatori

[modifica | modifica wikitesto]

La teoria dei compilatori si occupa della costruzione di compilatori, ovvero traduttori di programmi da un linguaggio sorgente ad uno obiettivo. Il processo di compilazione è tradizionalmente distinto in una fase di analisi sintattica, cioè la scansione e il parsing, una fase di analisi semantica, che determina cosa il programma debba fare, una fase di ottimizzazione, volta a migliorare le prestazioni del programma rispetto a certe metriche (p. es. il tempo di esecuzione o l'occupazione di memoria, e una fase finale di generazione del codice, che restituisce in output un programma equivalente a quello ricevuto in input (p.es. nel insieme di istruzioni di una CPU).

Sistemi a tempo d'esecuzione

[modifica | modifica wikitesto]

sistemi a tempo d'esecuzione sono sia gli ambienti di esecuzione dei linguaggi di programmazione, sia i loro componenti, come le macchine virtuali, i garbage collector o le interfacce di funzioni esterne.

Riviste, pubblicazioni e conferenze

[modifica | modifica wikitesto]

Il luogo primario dove le ricerche sui linguaggi di programmazione vengono presentate sono conferenze, come: il Symposium on Principles of Programming Languages (POPL), la Conference on Programming Language Design and Implementation (PLDI), la International Conference on Functional Programming (ICFP), la International Conference on Object Oriented Programming, Systems, Languages and Applications (OOPSLA).

Tra le riviste notevoli, invece, si trovano invece: gli ACM Transactions on Programming Languages and Systems (TOPLAS), il Journal of Functional Programming (JFP), il Journal of Functional and Logic Programming, e Higher-Order and Symbolic Computation.

Note

[modifica | modifica wikitesto]
  1. ^ http://www.c2.com/cgi/wiki?, su c2.com.
  2. ^ Corrado Böhm e Wolf Gross (1996).
  3. ^ Benjamin C. Pierce. 2002.

Bibliografia

[modifica | modifica wikitesto]

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica