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.J. Arkko & V. Hirvisalo & J. Kuusela & E. Nuutila & M. Tamminen, XE Reference Manual (XE Version 1.0), 1989. Dept. of Computer Science, Helsinki University of Technology, Helsinki, Finland

 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ä.A History of CLU

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

    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  

Luokka:Ohjelmointikielet
Luokka:Massachusetts Institute of Technology