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.
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 |
Nimi CLU tulee sanoista CLUster programming language.
Historia
muokkaaCLU 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
muokkaaVaikka CLU:ssa on stattinen käännösaikainen tyypitys, CLU:n tietotyypit ovat melko joustavia ja niille on roskankeruu.
Abstraktit tietotyypit
muokkaaCLU-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ää.
Iteraattorit
muokkaaCLUssa 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
muokkaaCLU-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
muokkaaCLU:ssa on yleisimmistä tietotyypeistä sekä muutettavissa olevat että muuttamattomat (immutable) tietotyypit. Nykyaikaisista ohjelmointikielistä tämä on otettu käyttöön Pythonissa.
Monisijoitus
muokkaaCLU 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
muokkaaCLU tukee poikkeuksia.
Lähteet
muokkaa- ↑ 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
- ↑ A History of CLU
Aiheesta muualla
muokkaa- CLU:n kotisivu (historiallinen) (englanniksi)
- HOPL: an interactive Roster of Programming Languages - CLU (Arkistoitu – Internet Archive) (englanniksi)