Clean (ohjelmointikieli)

ohjelmointikieli

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

Kielen merkittävimmät sisäänrakennetut ja muut ominaisuudet ovat:

Esimerkkejä muokkaa

Hei maailma:

Start = "Hei maailma"

Kertoma:

kertoma 0 = 1
kertoma n = n * kertoma (n - 1)

// tulostetaan 10:n kertoma
Start = kertoma 10

Fibonacci-sarja:

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