tiszta | |
---|---|
Szemantika | funkcionális |
Nyelvóra | tiszta funkcionális programozási nyelv [d] ,programozási nyelvés nem szigorú programozási nyelv [d] |
Megjelent | 1987 |
Szerző | A nijmegeni Radboud Egyetem Szoftvertechnológiai Kutatócsoportja |
Kiadás | 3.1 (2022. január 5. ) |
Típusrendszer | szigorú |
Főbb megvalósítások | tiszta |
Befolyásolva | Sovány |
Engedély | GNU LGPL |
Weboldal | clean.cs.ru.nl |
A Clean egy tisztán funkcionális programozási nyelv , amely támogatja a funkcionális programozási paradigma alapelveit . A számításokhoz hagyományos matematikai módszereket használ az értékek származtatására - az egységes helyettesítést és a matematikai indukciót .
A Clean disztribúció része a Windows integrált fejlesztői környezete (IDE).
A Clean nyelv sok tekintetben ( szintaktikailag is ) hasonló a Haskell nyelvhez . A fő különbség a Clean és a Haskell között az, ahogyan kölcsönhatásba lép a külső állapottal (azaz az I/O mód): a monádok helyett a Clean olyan típusokat használ, amelyek garantálják az egyediséget . Ez nagyobb hatékonyságot biztosít a megfelelő kódrészletekben, mint az absztrakt adatstruktúrákat destruktív módon frissítik , nem cserélik ki.
A Clean language fordító gráf átírást és redukciót használ, és viszonylag nagy hatékonysággal (néha megelőzi a Haskellt, néha lemaradva) natív kódot generál a C köztes nyelvként.
Gyári :
modul faktoriális import StdEnv fac 0 = 1 fac n = n * fac ( n -1 ) // Keresse meg a 10 faktoriálisát Start = fac 10 | modul faktoriális2 import StdEnv fac 0 = 1 fac n = prod [ 1 .. n ] // Számok szorzata 1-től n-ig // Faktoriális 6 keresése Start = fac 6 |
Infix operátor:
( ^ ) infixr 8 :: Int Int -> Int ( ^ ) x 0 = 1 ( ^ ) x n = x * x ^ ( n - 1 )Ez a deklaráció leírja, hogy a függvény egy jobboldali asszociatív infix operátor 8-as prioritással: ez azt jelenti, hogy x*x^(n-1)ekvivalens x*(x^(n-1))a -val szemben (x*x)^(n-1). Ez az operátor előre meghatározott az StdEnv -ben, a Clean standard könyvtárban.
Grafikon átíráson és redukción alapuló számítások. A konstansok, mint a számok, grafikonok, míg a függvények gráf-átíró képletek. Ez a natív kódra való fordítással kombinálva a Clean-ban írt és magas szintű absztrakciót használó programok viszonylag gyorsan futnak. Ezt megerősítik a tesztek Computer Language Benchmarks Game.
A Clean korábbi verziói teljes egészében C nyelven készültek, hogy elkerüljék a fordítói felpörgetési problémákat .
A SAPL rendszer a Core Clean-t JavaScriptre fordítja, és nem használja az ABC bájtkódot.
A Core Clean, egy magas szintű funkcionális nyelv és a gépi kód közötti szakadék áthidalására az ABC gépet használják. Ez egy kötelező absztrakt gráf újraíró gép . Konkrét gépi kód generálása absztrakt ABC kódból viszonylag kis lépés, így sokkal könnyebb több architektúrához kódot generálni ABC géppel.
Az ABC gépnek szokatlan memóriamodellje van. Grafikontárolóval rendelkezik a szerkesztett grafikon mentéséhez a felülírás során. Az A verem (argumentum) a csomópontokhoz kapcsolódó argumentumokat tárolja a gráftárolóban. Így a csomóponti argumentumok átírhatók, ami a mintaillesztéshez szükséges. A B verem (alapérték - alapértékek) alapértékeket tartalmaz (egész számok, karakterek, számok stb.). Bár nem feltétlenül szükséges (ezek az elemek mindegyike lehet csomópont a gráftárban), egy külön verem használata sokkal hatékonyabb. A C (Control) verem tartalmazza az áramlásvezérlés visszatérési címeit.
A Clean rendelkezik Microsoft Windows , Apple Macintosh , Solaris és Linux verziókkal .
Egyes könyvtárak bizonyos platformokon nem érhetők el. Például az ObjectIO csak Windows és Mac rendszeren érhető el. A hangszórók fájlba rögzítésének funkciója csak Windows rendszeren érhető el.
A Clean szintaxis nagyon hasonló a Haskellhez, néhány jelentős különbséggel:
Haskell | tiszta | Megjegyzések |
---|---|---|
[ x | x <- [ 1 .. 10 ] , páratlan x ] | [ x \\ x <- [ 1 .. 10 ] | isOddx ] _ | Lista felvétel |
x : xs | [ x : xs ] | mínusz operátor |
adatfa a = Üres | _ Csomópont ( a fa ) a ( fa a ) | :: Fa a = Üres | Csomópont ( a fa ) a ( fa a ) | Algebrai adattípus |
( Eq a , Eq b ) => ... | ... | Eq a & Eq b | osztály állításai és összefüggései |
fun t @ ( l x r csomópont ) = ... | szórakoztató t =: ( l x r csomópont ) = ... | mint-mintákat |
ha x > 10 , akkor 10 különben x | ha ( x > 10 ) 10 x | ha |
Alapvetően a Haskell több szintaktikai cukrot tartalmaz , mint a Clean.
Programozási nyelvek | |
---|---|
|