Clean (ohjelmointikieli)
Clean | |
---|---|
Paradigma | funktionaalinen |
Tyypitys | vahva, staattinen, dynaaminen |
Muistinhallinta | roskienkeruu |
Julkaistu | 1984 |
Kehittäjä | Software Technology Research Group of Radboud University Nijmegen |
Kehitysversio | 2.2 |
Merkittävimmät toteutukset | Clean |
Vaikutteet | Lean, Haskell |
Käyttöjärjestelmä | Windows, Mac, Linux, Solaris |
Verkkosivu | http://clean.cs.ru.nl/ |
Uutisryhmä | julkaisut keskustelu |
Clean on puhtaasti funktionaalinen ohjelmointikieli. Kielen pääasiallinen toteutus on Nijmegenin yliopiston tekemä, ja se on saatavilla Microsoft Windows-, Apple Macintosh-, Solaris- ja Linux-käyttöjärjestelmälle. Toteutus on kaksoislisensöity – se on saatavilla sekä GNU LGPL- että kaupallisen suljetun lähdekoodin lisenssillä. Kielen kehitystyö tapahtuu pääasiassa Windows-alustalla, mikä näkyy siinä, että muille alustoille ei ole vielä saatavilla dynaamista linkkeriä. Myös I/O-kirjastojen toteutuksessa on eroja.
Clean on hyvin samankaltainen kieli kuin Haskell. Kielten syntaksissa on pieniä eroja, minkä lisäksi Clean sisältää joukon Haskell 98 -stardardista puuttuvia ominaisuuksia. Kielen ainutlaatuisiin piirteisiin lukeutuvat uniikit tyypit, joilla jonkin arvon olemassaolo voidaan rajoittaa tarkalleen yhteen paikkaan ohjelmassa. Ominaisuutta voidaan käyttää monadien asemesta pakotetun peräkkäisyyden toteuttamiseen esimerkiksi I/O:ssa. Lisäksi ominaisuudella voidaan taata, ettei arvon muuttaminen paikallaan riko viittauksellista läpinäkyvyyttä. Cleanin laskenta perustuu graafin uudelleenkirjoittamiseen ja reduktioihin. Yhdessä nämä ominaisuudet tekevät kielen toteutuksesta erittäin tehokkaan. Kielen käännös tapahtuu kaksivaiheisesti ABC-tavukoodin kautta natiivikoodiksi.
Kieltä käytetään lähinnä akateemisessa tutkimuksessa.
Ominaisuuksia
[muokkaa | muokkaa wikitekstiä]Kielen merkittävimmät sisäänrakennetut ja muut ominaisuudet ovat:
- Viittauksellinen läpinäkyvyys – funktiokutsu palauttaa samoilla syötteilla aina saman tuloksen
- Korkeamman asteen funktiot, hahmonsovitus, vartiolausekkeet ja currying
- Listat ja taulukot (listoille ja taulukoille on useita tarkentavia tyyppiannotaatioita)
- Algebralliset tietotyypit ja tietueet
- Geneerisyys, tyyppiluokat, uniikit ja dynaamiset tyypit
- Laiska laskenta, joka mahdollistaa äärettömät tietotyypit
- Automaattinen roskienkeräys
- Siirrettävyys eri alustoille korkean abstraktiotason ansiosta
- Graafinen kehitysympäristö, joka on kirjoitettu Cleanilla
Esimerkkejä
[muokkaa | muokkaa wikitekstiä]Start = "Hei maailma"
kertoma 0 = 1 kertoma n = n * kertoma (n - 1) // tulostetaan 10:n kertoma Start = kertoma 10
fib 0 = 0 fib 1 = 1 fib n = fib (n - 2) + fib (n - 1)
Potenssioperaattori:
(^) infixr 8 :: Int Int → Int (^) x 0 = 1 (^) x n = x * x ^ (n - 1)
Yllä tyyppisignatuuri määrää, että funktio on oikealta assosiatiivinen, käyttää infix-muotoa ja sen presedenssin prioriteetti on 8. Tällöin ^ sitoo voimakkaammin kuin *, jonka vuoksi x*x^(n-1)
on yhtä suuri x*(x^(n-1))
:n eikä (x*x)^(n-1)
:n kanssa. Tämä funktio on määritelty Cleanin standardiympäristössä.
Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- Clean homepage
- Clean in FOLDOC (Arkistoitu – Internet Archive)
- Clean in The Computer Language Benchmarks Game