ren | |
---|---|
Semantik | funktionelle |
Sprog klasse | rent funktionelt programmeringssprog [d] ,programmeringssprogog ikke-strengt programmeringssprog [d] |
Dukkede op i | 1987 |
Forfatter | Software Technology Research Group ved Radboud University Nijmegen |
Frigøre | 3.1 (5. januar 2022 ) |
Type system | streng |
Større implementeringer | ren |
Blev påvirket | Læne |
Licens | GNU LGPL |
Internet side | clean.cs.ru.nl |
Clean er et rent funktionelt programmeringssprog, der understøtter de grundlæggende principper i det funktionelle programmeringsparadigme . Til beregninger bruger den traditionelle matematiske metoder til at udlede værdier - en samlet substitution og matematisk induktion .
Et integreret udviklingsmiljø (IDE) til Windows er inkluderet i Clean-distributionen.
Clean-sproget ligner på mange måder (inklusive syntaktisk ) Haskell-sproget . Den største forskel mellem Clean og Haskell er den måde, den interagerer med ekstern tilstand (dvs. måden I/O ): I stedet for monader bruger Clean typer, der garanterer unikhed . Dette giver mere effektivitet i de relevante kodestykker, som abstrakte datastrukturer opdateres destruktivt , ikke erstattes.
Clean language-oversætteren bruger grafomskrivning og reduktion og genererer indbygget kode med relativt høj effektivitet (nogle gange overhaler Haskell, nogle gange bagud) ved at bruge C som et mellemsprog.
modul faktoriel import StdEnv fac 0 = 1 fac n = n * fac ( n -1 ) // Find faktoren af 10 Start = fac 10 | modul factorial2 import StdEnv fac 0 = 1 fac n = prod [ 1 .. n ] // Produkt af tal fra 1 til n // Find faktor 6 Start = fac 6 |
Infix operator:
( ^ ) infixr 8 :: Int Int -> Int ( ^ ) x 0 = 1 ( ^ ) x n = x * x ^ ( n -1 )Denne erklæring beskriver, at funktionen er en højreassociativ infix-operator med forrang 8: det betyder, at den x*x^(n-1)er ækvivalent x*(x^(n-1))i modsætning til (x*x)^(n-1). Denne operatør er foruddefineret i StdEnv , Clean standardbiblioteket.
Beregninger baseret på grafomskrivning og reduktion. Konstanter som tal er grafer, mens funktioner er graf-omskrivningsformler. Dette, kombineret med kompilering til native kode, får programmer skrevet i Clean og med et højt abstraktionsniveau til at køre relativt hurtigt. Dette bekræftes af test Computer Language Benchmarks Game.
Tidligere versioner af Clean blev udelukkende skrevet i C for at undgå problemer med compiler-spin- up .
SAPL-systemet kompilerer Core Clean til JavaScript og bruger ikke ABC-bytekoden.
For at bygge bro mellem Core Clean, et funktionelt sprog på højt niveau, og maskinkode, bruges ABC-maskinen. Det er en imperativ maskine til omskrivning af abstrakte grafer . Generering af konkret maskinkode fra abstrakt ABC-kode er et relativt lille trin, så det er meget nemmere at generere kode til flere arkitekturer med ABC-maskine.
ABC-maskine har en usædvanlig hukommelsesmodel. Den har et graflager til at gemme den redigerede graf under overskrivning. Stak A (argument) gemmer argumenterne relateret til noderne i graflageret. Således kan node-argumenterne omskrives, hvilket er nødvendigt for mønstermatchning. Stak B (Grundværdi - grundlæggende værdier) indeholder grundlæggende værdier (heltal, tegn, tal osv.). Selvom det ikke er strengt nødvendigt (alle disse elementer kan være noder i graflageret), er det meget mere effektivt at bruge en separat stak. C (Kontrol) stakken indeholder returadresserne til flowkontrol.
Clean har versioner til Microsoft Windows , Apple Macintosh , Solaris og Linux .
Nogle biblioteker er ikke tilgængelige for nogle platforme. For eksempel er ObjectIO kun tilgængelig til Windows og Mac. Funktionen til at optage højttalere til filer er kun tilgængelig for Windows.
Clean-syntaksen minder meget om Haskell, med nogle bemærkelsesværdige forskelle:
Haskell | ren | Bemærkninger |
---|---|---|
[ x | x <- [ 1 .. 10 ] , er ulige x ] | [ x \\ x <- [ 1 .. 10 ] | isOddx ] _ | Liste medtagelse |
x : xs | [ x : xs ] | ulemper operatør |
datatræ a = tomt | _ Node ( Træ a ) a ( Træ a ) | :: Træ a = Tom | Node ( Træ a ) a ( Træ a ) | Algebraisk datatype |
( Eq a , Eq b ) => ... | ... | Eq a & Eq b | klassepåstande og sammenhænge |
fun t @ ( Node l x r ) = ... | sjov t =: ( Knudepunkt l x r ) = ... | som-mønstre |
hvis x > 10 så 10 ellers x | hvis ( x > 10 ) 10 x | hvis |
Dybest set har Haskell mere syntaktisk sukker end Clean.
Programmeringssprog | |
---|---|
|