Ren

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 27. februar 2018; checks kræver 8 redigeringer .
ren
Semantik funktionelle
Sprog klasse rent funktionelt programmeringssprog [d] ,programmeringssprogog ikke-strengt programmeringssprog [d]
Dukkede op i 1987  ( 1987 )
Forfatter Software Technology Research Group ved Radboud University Nijmegen
Frigøre 3.1 (5. januar 2022 ) ( 2022-01-05 )
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 .

Sprogets egenskaber

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.

Eksempler

Hej Verden! :

modul hej Start :: { # Char } Start = "Hej verden!"

Faktoriel :

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

Fibonacci tal :

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

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.

Sådan fungerer Clean

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.

Kompilering

  1. Kildefiler (.icl) og definitionsfiler (.dcl) er oversat fra Core Clean, basisvarianten af ​​Clean, til Clean.
  2. Core Clean konverteres til platform-uafhængig bytecode (.abc), som er implementeret i C og Clean.
  3. Bytekoden konverteres til objektobjektkode (.o) ved hjælp af C.
  4. Objektets objektkode linkes til andre filer i modulet og runtime-systemet og konverteres til en almindelig eksekverbar.

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.

ABC-maskine

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.

Platforme

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.

Syntaksforskelle med Haskell

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 10 ellers x hvis ( x > 10 ) 10 x hvis

Dybest set har Haskell mere syntaktisk sukker end Clean.

Noter

Links