Tiszta

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2018. február 27-én felülvizsgált verziótól ; az ellenőrzések 8 szerkesztést igényelnek .
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  ( 1987 )
Szerző A nijmegeni Radboud Egyetem Szoftvertechnológiai Kutatócsoportja
Kiadás 3.1 (2022. január 5. ) ( 2022-01-05 )
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 nyelv jellemzői

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.

Példák

Helló Világ! :

modul hello Kezdés :: { # Char } Start = "Helló világ!"

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

Fibonacci számok :

Fibonacci modul fib 0 = 0 fib1 = 1_ _ fib n = fib ( n - 2 ) + fib ( n - 1 ) Start = fib 7

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.

Hogyan működik a Clean

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.

Összeállítás

  1. A forrásfájlok (.icl) és a definíciós fájlok (.dcl) a Core Clean-ról, a Clean alapváltozatáról Clean-ra lettek fordítva.
  2. A Core Clean platformfüggetlen bájtkóddá (.abc) konvertálódik, amely a C és a Clean nyelveken valósul meg.
  3. A bájtkód objektum-objektumkóddá (.o) konvertálódik a C használatával.
  4. Az objektum objektumkódja a modulban és a futásidejű rendszerben lévő többi fájlhoz kapcsolódik, és normál végrehajtható fájlokká konvertálódik.

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.

ABC gép

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.

Platformok

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.

Szintaktikai különbségek a Haskell-lel

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.

Jegyzetek

Linkek