CLU (linguaggio di programmazione) - CLU (programming language)

CLU
Paradigma multi-paradigma : orientato agli oggetti , procedurale
Progettato da Barbara Liskov e i suoi studenti
Sviluppatore Istituto di Tecnologia del Massachussetts
Apparso per la prima volta 1975 ; 46 anni fa ( 1975 )
Rilascio stabile
Nativo CLU 1.5 ( SPARC , VAX ) / 26 maggio 1989 ; 32 anni fa ( 1989-05-26 )

CLU portatile / 6 novembre 2009 ; 11 anni fa ( 2009-11-06 )

Disciplina di digitazione forte
Sito web pmg .csail .mit .edu /CLU .html
Principali implementazioni
PDP-10 CLU, CLU nativo, CLU portatile, clu2c
Influenzato da
ALGOL 60 , Lisp , Simula , Alphard
influenzato
Ada , Argus , C++ , Lua , Python , Ruby , Sather , Swift

CLU è un linguaggio di programmazione creato al Massachusetts Institute of Technology (MIT) da Barbara Liskov e dai suoi studenti a partire dal 1973. Sebbene non abbia trovato ampio utilizzo, ha introdotto molte funzionalità che sono ampiamente utilizzate ora ed è visto come un passo avanti lo sviluppo della programmazione orientata agli oggetti (OOP).

I contributi chiave includono tipi di dati astratti , call-by-sharing , iteratori , più valori restituiti (una forma di assegnazione parallela ), tipi con parametri indipendenti dai tipi e tipi varianti indipendenti dai tipi . È anche degno di nota per l'uso di classi con costruttori e metodi, ma senza ereditarietà .

cluster

La sintassi di CLU era basata su ALGOL , allora il punto di partenza per la maggior parte dei nuovi progetti di linguaggi. L'aggiunta chiave è stata il concetto di cluster , il sistema di estensione del tipo di CLU e la radice del nome della lingua (CLUster). I cluster corrispondono generalmente al concetto di "classe" in un linguaggio OO. Ad esempio, ecco la sintassi CLU per un cluster che implementa numeri complessi :

    complex_number = cluster is add, subtract, multiply, ...
        rep = record [ real_part: real, imag_part: real ]
        add = proc ... end add;
        subtract = proc ... end subtract;
        multiply = proc ... end multiply;
        ...
    end complex_number;

Un cluster è un modulo che incapsula tutti i suoi componenti ad eccezione di quelli esplicitamente nominati nella clausola "is". Questi corrispondono ai componenti pubblici di una classe nei linguaggi OO recenti. Un cluster definisce anche un tipo che può essere denominato all'esterno del cluster (in questo caso, "complex_number"), ma il suo tipo di rappresentazione (rep) è nascosto dai client esterni.

I nomi dei cluster sono globali e non è stato fornito alcun meccanismo di spazio dei nomi per raggruppare i cluster o consentire loro di essere creati "localmente" all'interno di altri cluster.

CLU non esegue conversioni di tipo implicite . In un cluster, le conversioni di tipo esplicito su e giù cambiano tra il tipo astratto e la rappresentazione. Esiste un tipo universale any e una procedura force[] per verificare che un oggetto sia di un certo tipo. Gli oggetti possono essere mutabili o immutabili, questi ultimi essendo tipi base come interi, booleani, caratteri e stringhe.

Altre caratteristiche

Un'altra caratteristica chiave del sistema di tipo CLU sono gli iteratori , che restituiscono oggetti da una raccolta in serie, uno dopo l'altro. Gli iteratori offrono un'interfaccia di programmazione dell'applicazione (API) identica , indipendentemente dai dati con cui vengono utilizzati. Quindi l'iteratore per una raccolta di complex_numbers può essere usato in modo intercambiabile con quello per un array di integers. Una caratteristica distintiva degli iteratori CLU è che sono implementati come coroutine, con ogni valore fornito al chiamante tramite una dichiarazione di rendimento . Gli iteratori come quelli in CLU sono ora una caratteristica comune di molti linguaggi moderni, come C#, Ruby e Python, anche se di recente vengono spesso definiti generatori.

CLU include anche la gestione delle eccezioni , basata su vari tentativi in ​​altre lingue; le eccezioni vengono sollevate utilizzando signale gestite con except. A differenza della maggior parte degli altri linguaggi con la gestione delle eccezioni, le eccezioni non vengono implicitamente segnalate nella catena di chiamata. Inoltre, a differenza della maggior parte degli altri linguaggi che forniscono la gestione delle eccezioni, le eccezioni in CLU sono considerate parte del normale flusso di esecuzione e sono considerate un modo "normale" ed efficiente per uscire dai cicli o tornare dalle funzioni; ciò consente l'assegnazione diretta dei valori di ritorno "tranne quando" si applicano altre condizioni. Le eccezioni che non vengono né rilevate né segnalate esplicitamente vengono immediatamente convertite in un'eccezione di errore speciale che in genere termina il programma.

CLU è spesso accreditato come il primo linguaggio con tipi di varianti indipendenti dai tipi , chiamati oneofs , prima che il linguaggio ML li avesse.

Un'ultima caratteristica distintiva in CLU è l' assegnazione parallela ( assegnazione multipla), dove più di una variabile può apparire sul lato sinistro di un operatore di assegnazione . Ad esempio, la scrittura x,y := y,xscambierebbe i valori di xe y. Allo stesso modo, le funzioni potrebbero restituire diversi valori, come x,y,z := f(t). L'assegnazione parallela (anche se non più valori di ritorno) precede CLU, apparendo in CPL (1963), denominata assegnazione simultanea , ma CLU lo rese popolare ed è spesso accreditato come l'influenza diretta che porta all'assegnazione parallela nelle lingue successive.

Tutti gli oggetti in un programma CLU vivono nell'heap e la gestione della memoria è automatica.

CLU supporta astrazioni di dati definite dall'utente parametrizzate per tipo . È stato il primo linguaggio a offrire tipi parametrizzati limitati indipendenti dai tipi, utilizzando clausole struttura dove per esprimere vincoli sugli argomenti di tipo effettivi.

Influenza

CLU e Ada sono state le principali fonti di ispirazione per i modelli C++ .

I meccanismi di gestione delle eccezioni di CLU hanno influenzato linguaggi successivi come C++ e Java .

Sather , Python e C# includono iteratori , che sono apparsi per la prima volta in CLU.

Perl e Lua hanno ricevuto più assegnazioni e più ritorni dalle chiamate di funzione da CLU.

Python e Ruby hanno preso in prestito la chiamata condividendo , l' istruzione yield e l'assegnazione multipla.

Riferimenti

link esterno