CLU

**CLU** on käännettävä abstrakteja tietotyyppejä tukeva akateeminen ohjelmointikieli vuodelta 1974. Siinä on ensimmäistä kertaa toteutettu iteraattorit, muuttamattomat (immutable) tietotyypit ja syntaktinen sokerointi jotka kaikki ovat ominaisuuksia, jotka ovat vasta nyt yleistymässä tuotanto-ohjelmointikielissä kuten Ruby ja Python.

Nimi CLU tulee sanoista *CLUster programming language*.

## Historia

CLU kehitettiin yhdysvaltalaisessa MIT-yliopistossa 1974 professori Barbara Liskovin johdolla. Tarkoituksena oli tutkia abstrakteja tietotyyppejä.

CLU-ohjelmointikielellä on toteutettu muutamia täysin toimivia tutkimusprojekteja (tekstintoimitin, käyttöjärjestelmä), mutta varsinaisessa tuotanto-ohjelmoinnissa sitä ei ole käytetty.

Suomessa on kehitetty CLU:n pohjalta tutkimusprojektissa uusi ohjelmointikieli nimeltä XE vuonna 1989.

## Ominaisuuksia

Vaikka CLU:ssa on stattinen käännösaikainen tyypitys, CLU:n tietotyypit ovat melko joustavia ja niille on roskankeruu.

### Abstraktit tietotyypit

CLU-ohjelmointikielessä voidaan toteuttaa abstrakteja tietotyyppejä. Näitä kutsutaan klustereiksi. Klusteri vastaa oliokielten luokkia, mutta CLU ei ole varsinainen olio-ohjelmointikieli vaikka siihen on otettu vaikutteita myös ensimmäisesti olio-ohjelmointikielestä, Simula 67:stä.

Esimerkiksi kompleksiluvut määrittelevä klusteri näyttäisi CLU-ohjelmointikielellä seuraavalta:


```
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;
```


**rep** määrittelee tietotyypin sisäisen esitysmuodon eikä siihen ole pääsyä klusterin ulkopuolelta.

C++-ohjelmointikielen mallit (templates) ovat saaneet vaikutteita CLU:n abstraktien tietotyyppien käsittelystä.

CLU:ssa ei ole tietotyyppien perintää.

### Iteraattorit

CLUssa on ensimmäisenä toteutettu iteraattorit. Nykyisistä ohjelmointikielistä iteraattorit ovat keskeinen Ruby-ohjelmointikielen rakenne. Myös uusissa Python-ohjelmointikielen toteutuksissa voi käyttää helposti iteraattoreita.

Iteraattori on mekanismi, jolla silmukkarakenteella voidaan käydä läpi abstraktin tietotyypin arvoja.

### Syntaktinen sokerointi

CLU-ohjelmointikielessä on esimmäisenä otettu käyttöön termi syntaktinen sokerointi. Se tarkoittaa sitä, että esimerkiksi "1+1" on vain merkintä, joka tulkitaan abstraktin tietotyypin "kokonaisluku" operaatioksi "add". "1+1" tulkitaan jo syntaktisella tasolla samanlaiseksi operaatioksi kuin esimerkiksi nykyaikaisen ohjelmointikielen metodikutsut.

Syntaktinen sokerointi on käytössä sekä Rubyssä että jossain määrin Pythonissa.

### Muuttamattomat tietotyypit

CLU:ssa on yleisimmistä tietotyypeistä sekä muutettavissa olevat että muuttamattomat *(immutable)* tietotyypit. Nykyaikaisista ohjelmointikielistä tämä on otettu käyttöön Pythonissa.

### Monisijoitus

CLU oli ensimmäinen ohjelmointikieli missä sijoituksen voi tehdä rinnakkain, esimerkiksi


```text
x,y = y,x
```


vaihtaa muuttujien x ja y arvot keskenään.

Myös funktion paluuarvon voi olla useampi arvo, jotka sijoitetaan useampaan muuttujaan (vrt. Pythonissa *tuple* funktion paluuarvona).

### Poikkeukset
CLU tukee poikkeuksia.

## Lähteet

## Aiheesta muualla
* CLU:n kotisivu (historiallinen) 
* HOPL: an interactive Roster of Programming Languages - CLU