In questo articolo esploreremo nel dettaglio la vita e l'opera di CLU (linguaggio di programmazione), un personaggio che ha lasciato un segno indelebile nella storia. Dai suoi primi anni di vita ai suoi successi più importanti, approfondiremo la sua carriera per comprendere il suo impatto in vari ambiti. Attraverso interviste, analisi e testimonianze scopriremo gli aspetti più rilevanti di CLU (linguaggio di programmazione) e come la sua eredità continui ad essere attuale oggi. Inoltre, esamineremo l'influenza di CLU (linguaggio di programmazione) sulla società contemporanea e la sua rilevanza per le generazioni future.
CLU linguaggio di programmazione | |
---|---|
Autore | Barbara Liskov e Massachusetts Institute of Technology |
Data di origine | 1975 |
Paradigmi | programmazione procedurale e programmazione orientata agli oggetti |
Influenzato da | ALGOL 60, Lisp e Simula |
Implementazione di riferimento | |
Sito web | www.pmg.lcs.mit.edu/CLU.html |
Il CLU è un linguaggio di programmazione creato al MIT da Barbara Liskov e dai suoi studenti tra il 1974 ed il 1975. È noto per l'uso di costruttori di tipi di dati astratti che includevano il codice che operava su di essi, un passo chiave in direzione della programmazione orientata agli oggetti (OOP). Purtroppo molte delle altre caratteristiche dell'OOP erano mancanti od incomplete, come l'ereditarietà, ed il linguaggio era anche appesantito da una sintassi alle volte frustrante.
La sintassi del CLU era basata sull'ALGOL, allora considerato il punto di partenza per lo sviluppo di molti nuovi linguaggi. Il punto chiave era il concetto di cluster, un sistema di estensione dei tipi e radice del nome del linguaggio (CLUster). I cluster corrispondono generalmente al concetto di un "oggetto" in un linguaggio orientato agli oggetti ed hanno circa la stessa sintassi. Ecco la sintassi in CLU di un cluster che implementa i numeri complessi:
complex_number = cluster is add, subtract, multiply, ... rep = record add = proc ... end add; subtract = proc ... end subtract; multiply = proc ... end multiply; ... end complex_number;
Mentre i cluster offrivano per l'epoca un sistema avanzato per la strutturazione dei programmi, il CLU non offriva però nessun tipo di struttura per gli stessi cluster. I nomi dei cluster erano globali, e nessun meccanismo di spazio dei nomi era stato previsto per raggruppare i cluster o permettergli di essere creati "localmente" all'interno di altri cluster. Questo problema non è limitato al CLU: è sorprendente notare come così tanti linguaggi hanno manifestato l'assenza di questa caratteristica - data l'importanza nell'ALGOL di dare uno scopo alle variabili, sembrava che dare uno scopo ai nomi dei cluster/oggetti dovesse essere una cosa ovvia.
Il CLU non permette le conversioni implicite dei tipi. In un cluster le conversioni esplicite de tipi "up" (su) e "down" (giù) cambiano tra il tipo astratto e la sua rappresentazione. Esiste un tipo universale "any" (qualunque) ed una procedura force
per controllare che l'oggetto sia di un certo tipo. Gli oggetti possono essere mutabili od immutabili: di quest'ultimo tipo sono i "tipi base" come gli interi.
Un'altra caratteristica importante del sistema dei tipi del CLU erano gli iteratori, che restituivano oggetti da una collezione uno ad uno. Gli iteratori erano "scatole nere" che offrivano la medesima API per qualunque tipo di dati dovessero trattare. Perciò l'iteratore per una collezione di numeri complessi
era identico a quello per una matrice di interi
. Gli iteratori sono oggi una caratteristica comune di molti linguaggi moderni.
Il CLU includeva anche la gestione delle eccezioni, basata su quella presente in altri linguaggi; le eccezioni erano sollevate utilizzando signal
e gestite tramite except
. Stranamente, vista l'importanza nel linguaggio dei tipi, il CLU non offriva i tipi enumerati né nessun modo semplice per poterli creare.
L'ultima delle caratteristiche degne di nota del CLU era l'assegnazione multipla, dove una o più variabili potevano apparire a sinistra di un operatore di assegnamento. Ad esempio, scrivere x,y = y,x
scambiava i valori di x
ed y
; similmente, le funzioni potevano restituire diversi valori, come ad esempio x,y,z = f(t)
.
Tutti gli oggetti di un programma CLU vivevano nell'heap e la gestione della memoria era automatica.
yield
)Controllo di autorità | LCCN (EN) sh85027223 · J9U (EN, HE) 987007283915205171 |
---|