Puhdas

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 27. helmikuuta 2018 tarkistetusta versiosta . tarkastukset vaativat 8 muokkausta .
puhdas
Semantiikka toimiva
Kieliluokka puhdas toiminnallinen ohjelmointikieli [d] ,ohjelmointikielija ei-tiukka ohjelmointikieli [d]
Esiintyi 1987  ( 1987 )
Tekijä Radboudin yliopiston Nijmegenin ohjelmistoteknologian tutkimusryhmä
Vapauta 3.1 (5. tammikuuta 2022 ) ( 2022-01-05 )
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 .

Kielen ominaisuudet

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

Esimerkkejä

Hei maailma! :

moduuli hei Aloita :: { # Char } Aloita = "Hei maailma!"

Factorial :

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

Fibonaccin numerot :

moduuli fibonacci fib 0 = 0 fib1 = 1_ _ fib n = fib ( n - 2 ) + fib ( n - 1 ) Aloitus = fib 7

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 .

Kuinka Clean toimii

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.

Kokoelma

  1. Lähdetiedostot (.icl) ja määritelmätiedostot (.dcl) on käännetty Core Cleanista, Cleanin perusversiosta, Cleaniksi.
  2. Core Clean muunnetaan alustasta riippumattomaksi tavukoodiksi (.abc), joka on toteutettu C:ssä ja Cleanissa.
  3. Tavukoodi muunnetaan objektiobjektikoodiksi (.o) käyttämällä C:tä.
  4. Objektin objektikoodi linkitetään muihin moduulin ja ajonaikaisen järjestelmän tiedostoihin ja muunnetaan tavalliseksi suoritettavaksi tiedostoksi.

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.

ABC-kone

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.

Alustat

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.

Syntaksierot Haskellin kanssa

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.

Muistiinpanot

Linkit