CLU

Wikipediasta
Siirry navigaatioon Siirry hakuun
CLU
Paradigma abstratit tietotyypit
Tyypitys vahva
Yleinen suoritusmalli käännettävä
Muistinhallinta roskienkeräys
Julkaistu 1974
Kehittäjä Barbara Liskov
Merkittävimmät toteutukset Portable CLU
Vaikutteet PL/I, Simula 67
Vaikuttanut Ruby, Python, C++
Käyttöjärjestelmä Alustariippumaton
Verkkosivu 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.

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.[1]

Ominaisuuksia

[muokkaa | muokkaa wikitekstiä]

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

Abstraktit tietotyypit

[muokkaa | muokkaa wikitekstiä]

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ä.[2]

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ää.

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

[muokkaa | muokkaa wikitekstiä]

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

[muokkaa | muokkaa wikitekstiä]

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

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).

CLU tukee poikkeuksia.

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

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]