puhdas | |
---|---|
Semantiikka | toimiva |
Kieliluokka | puhdas toiminnallinen ohjelmointikieli [d] ,ohjelmointikielija ei-tiukka ohjelmointikieli [d] |
Esiintyi | 1987 |
Tekijä | Radboudin yliopiston Nijmegenin ohjelmistoteknologian tutkimusryhmä |
Vapauta | 3.1 (5. tammikuuta 2022 ) |
Tyyppijärjestelmä | tiukka |
Tärkeimmät toteutukset | puhdas |
Vaikutettu | Nojata |
Lisenssi | GNU LGPL |
Verkkosivusto | clean.cs.ru.nl |
Clean on puhdas toiminnallinen ohjelmointikieli , joka tukee toiminnallisen ohjelmoinnin paradigman perusperiaatteita . Laskelmissa se käyttää perinteisiä matemaattisia menetelmiä arvojen johtamiseen - yhtenäistä substituutiota ja matemaattista induktiota .
Integroitu kehitysympäristö (IDE) Windowsille sisältyy Clean-jakeluun.
Clean-kieli on monella tapaa samanlainen (mukaan lukien syntaktisesti ) kuin Haskell-kieli . Suurin ero Cleanin ja Haskellin välillä on tapa, jolla se on vuorovaikutuksessa ulkoisen tilan kanssa (eli tapa I/O ): Monadien sijaan Clean käyttää tyyppejä, jotka takaavat ainutlaatuisuuden . Tämä parantaa asianmukaisten koodinpätkien tehokkuutta, kuten abstrakteja tietorakenteita päivitetään tuhoavasti , ei korvata.
Puhdas kielen kääntäjä käyttää kaavioiden uudelleenkirjoittamista ja vähentämistä ja luo alkuperäistä koodia suhteellisen korkealla tehokkuudella (joskus ohittaa Haskellin, joskus jäljessä) käyttämällä C :tä välikielenä.
moduulifaktoriaali _ tuo StdEnv fac 0 = 1 fac n = n * fac ( n -1 ) // Etsi 10:n faktoriaali Start = fac 10 | moduuli factorial2 tuo StdEnv fac 0 = 1 fac n = prod [ 1 .. n ] // Lukujen tulo 1:stä n:ään // Etsi tekijä 6 Start = fac 6 |
Infix- operaattori:
( ^ ) infixr 8 :: Int Int -> Int ( ^ ) x 0 = 1 ( ^ ) x n = x * x ^ ( n - 1 )Tämä selitys kuvaa, että funktio on oikea-assosiatiivinen infix-operaattori, jonka etusija on 8: tämä tarkoittaa, että se x*x^(n-1)on ekvivalentti x*(x^(n-1))toisin kuin (x*x)^(n-1). Tämä operaattori on ennalta määritetty Clean-standardikirjastossa StdEnv .
Laskelmat perustuvat graafin uudelleenkirjoitukseen ja pelkistykseen. Vakiot, kuten numerot, ovat kaavioita, kun taas funktiot ovat graafin uudelleenkirjoituskaavoja. Tämä yhdistettynä alkuperäiseen koodiin kääntämiseen saa Cleanilla kirjoitetut ja korkeaa abstraktiota käyttävät ohjelmat toimimaan suhteellisen nopeasti. Tämän vahvistavat testit Computer Language Benchmarks Game.
Cleanin aiemmat versiot on kirjoitettu kokonaan C-kielellä kääntäjän pyörimisongelmien välttämiseksi .
SAPL-järjestelmä kääntää Core Cleanin JavaScriptiksi eikä käytä ABC-tavukoodia.
Core Cleanin, korkean tason toiminnallisen kielen, ja konekoodin välisen kuilun kuromiseksi umpeen käytetään ABC-konetta. Se on välttämätön abstraktien graafien uudelleenkirjoituskone . Konkreettisen konekoodin luominen abstraktista ABC-koodista on suhteellisen pieni askel, joten on paljon helpompaa luoda koodia useille arkkitehtuureille ABC-koneella.
ABC-koneessa on epätavallinen muistimalli. Siinä on graafisäilytys muokatun kaavion tallentamista varten päällekirjoituksen aikana. Pino A (argumentti) tallentaa solmuihin liittyvät argumentit graafin tallennustilaan. Siten solmuargumentit voidaan kirjoittaa uudelleen, mikä on välttämätöntä kuvioiden sovittamiseksi. Pino B (Perusarvo - perusarvot) sisältää perusarvot (kokonaisluvut, merkit, numerot jne.). Vaikka se ei ole ehdottoman välttämätöntä (kaikki nämä elementit voivat olla solmuja graafisäilössä), erillisen pinon käyttö on paljon tehokkaampaa. C-pino (Control) sisältää paluuosoitteet vuon ohjaamista varten.
Cleanilla on versiot Microsoft Windowsille , Apple Macintoshille , Solarisille ja Linuxille .
Jotkut kirjastot eivät ole saatavilla joillekin alustoille. Esimerkiksi ObjectIO on saatavilla vain Windowsille ja Macille. Kaiuttimien tallentaminen tiedostoihin on käytettävissä vain Windowsissa.
Clean-syntaksi on hyvin samanlainen kuin Haskell, mutta siinä on joitain merkittäviä eroja:
Haskell | puhdas | Huomautukset |
---|---|---|
[ x | x <- [ 1 .. 10 ] , isOdd x ] | [ x \\ x <- [ 1 .. 10 ] | isOddx ] _ | Luettelon sisällyttäminen |
x : xs | [ x : xs ] | miinukset operaattori |
tietopuu a = Tyhjä | _ Solmu ( Puu a ) a ( Puu a ) | :: Puu a = Tyhjä | Solmu ( Puu a ) a ( Puu a ) | Algebrallinen tietotyyppi |
( Eq a , Eq b ) => ... | ... | Eq a & Eq b | luokan väitteet ja kontekstit |
hauska t @ ( solmu l x r ) = ... | hauska t =: ( Solmu l x r ) = ... | as-kuvioita |
jos x > 10 niin 10 muuten x | jos ( x > 10 ) 10 x | jos |
Pohjimmiltaan Haskellissa on enemmän syntaktista sokeria kuin Cleanissa.
Ohjelmointikielet | |
---|---|
|