CLU (linguaggio di programmazione): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
Curiosità: Aggiunto il template "Curiosità"
 
(24 versioni intermedie di 18 utenti non mostrate)
Riga 1:
{{Linguaggio di programmazione
|immagine =
|didascalia =
|versione =
|utilizzo =
|tipizzazione =
|specifiche =
|estensione =
|ha_influenzato =
|implementazione_riferimento =
|sistema_operativo =
|lingua =
|licenza =
}}
 
Il '''CLU''' è un linguaggio di programmazione creato al [[Massachusetts Institute of Technology|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.
 
Line 4 ⟶ 19:
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 [[numero complesso|numeri complessi]]:
 
<code>
complex_number = cluster is add, subtract, multiply, ...
rep = record [ real_part: real, imag_part: real ]
Line 11 ⟶ 25:
multiply = proc ... end multiply;
...
end complex_number;</code>
 
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 meccanimomeccanismo 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 chenotare come così tanti linguaggi hanno manifestato l'assenza di questa caratteristica - datà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 <code>force[]</code> 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.
Line 20 ⟶ 34:
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 [[application programming interface|API]] per qualunque tipo di dati dovessero trattare. Perciò l'iteratore per una collezione di <code>numeri complessi</code> era identico a quello per una matrice di <code>interi</code>. 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 <code>signal</code> e gestite tramite <code>except</code>. Stranamente, vista l'importanza nel linguaggio dei tipi, il CLU non offriva i tipi enumerati ne' 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 <code>x,y = y,x</code> scambiava i valori di <code>x</code> ed <code>y</code>; similmente, le funzioni potevano restituire diversi valori, come ad esempio <code>x,y,z = f(t)</code>.
 
Tutti gli oggetti di un programma CLU vivevano nell'[[Heap (gestione della memoria)|heap]] e la gestione della memoria era automatica.
 
== Curiosità ==
{{Curiosità}}
 
* Clu era il nome dell'alter-ego digitale di [[Jeff Bridges|Kevin Flynn]] nel film di fantascienza ''[[Tron (film)|Tron]]''.
 
== Influenze su altri linguaggi di programmazione ==
* Il [[Python]] ed il [[Ruby (linguaggio di programmazione)|Ruby]] hanno ripreso diversi concetti dal CLU (come ad esempio gli assegnamenti multipli o l'istruzione <code>yield</code>)
 
* Il CLU e l'[[Ada (linguaggio)|Ada]] sono stati tra i maggiori ispiratori dei template del [[C++]]
* Il [[Python]] ed il [[Ruby]] hanno ripreso diversi concetti dal CLU (come ad esempio gli assegnamenti multipli o l'istruzione <code>yield</code>)
* I meccanismi di gestione delle eccezioni del CLU hanno influenzato alcuni linguaggi recenti come il [[Java (linguaggio di programmazione)|Java]] ed il C++
* Il CLU e l'[[Ada]] sono stati tra i maggiori ispiratori dei template del [[C++]]
* I meccanismi di gestione delle eccezioni del CLU hanno influenzato alcuni linguaggi recenti come il [[Java]] ed il C++
* Come nel CLU, anche in Java tutti gli oggetti vivono nell'heap e la gestione della memoria è automatica
* Il Python ed il [[C#]] includono il concetto di "generatori" (iteratori nel C#), che per primo apparve nel CLU come iteratori
Line 40 ⟶ 53:
 
== Collegamenti esterni ==
 
* [http://www.pmg.lcs.mit.edu/CLU.html CLU Home Page]
* {{Collegamenti esterni}}
* [https://web.archive.org/web/20030917041834/http://www.lcs.mit.edu/publications/pubs/pdf/MIT-LCS-TR-561.pdf Storia del CLU] (pdf)
* [https://web.archive.org/web/20081221221405/http://www.din.or.jp/~ushijima/clu2c.html clu2c]: un programma per compilare codice CLU in C
* [{{cita web|url=http://cgibin.erols.com/ziring/cgi-bin/cep/cep.pl?_key=CLU |titolo=Voce sul CLU nel Dizionario dei Linguaggi di Programmazione]}}
* [http://99-bottles-of-beer.net/language-clu-133.html CLU] esempio in CLU sul sito dimostrativo multi-linguaggio '99 bottles of beer'
 
{{Principali linguaggi di programmazione}}
{{Controllo di autorità}}
{{Portale|informatica}}
 
[[Categoria:Linguaggi di programmazione]]
{{Portale|informatica}}
 
[[de:CLU]]
[[en:CLU (programming language)]]
[[es:CLU]]
[[fa:زبان برنامه‌نویسی سی‌ال‌یو]]
[[fi:CLU]]
[[fr:CLU (langage)]]
[[gl:CLU]]
[[ja:CLU]]
[[pl:CLU]]
[[pt:CLU (linguagem de programação)]]