Article de reference

Propre (langage de programmation)

{{cite web |title=Download Clean |url=https://clean.cs.ru.nl/Download_Clean#Clean_3.0_License |website=Clean |access-date=23 July 2019}} "},"influenced by":{"wt":"[https://foldo...

langage de programmation purement fonctionnel et généraliste . Initialement appelé Concurrent Clean System ou Clean System [ il est développé depuis 1987 par une équipe de chercheurs de l' Université Radboud de Nimègue que son développement ait ralenti, certains chercheurs continuent de travailler avec ce langage . En 2018, une entreprise dérivée utilisant Clean a été créée

une syntaxe similaire à celle de Haskell , un langage plus récent : transparence référentielle , compréhension de listes , gardes , ramasse-miettes , fonctions d'ordre supérieur , curryfication et évaluation paresseuse . Cependant, contrairement à Haskell qui utilise des monades , Clean gère l'état mutable et les entrées/sorties (E/S) grâce à un système de types d'unicité . Le compilateur tire parti de ce système pour générer un code plus efficace, car il sait qu'à tout moment de l'exécution du programme, une seule référence peut exister vers une valeur de type unique. Par conséquent, une valeur unique peut être modifiée directement .

Un environnement de développement intégré (IDE) pour Microsoft Windows est inclus dans la distribution Clean.

Exemples

Bonjour le monde :

Factorielle :

Int fac 0 = 1 fac n = n * fac (n-1) Start = fac 10 "
fac :: Int -> Int fac 0 = 1 fac n = n * fac ( n -1 )Début = fac 10
Int fac n = prod [1..n] // The product of the numbers 1 to n Start = fac 10 "
fac :: Int -> Int fac n = prod [ 1 .. n ] // Le produit des nombres de 1 à nDébut = fac 10

Suite de Fibonacci :

Int fib 0 = 1 fib 1 = 1 fib n = fib (n - 2) + fib (n - 1) Start = fib 7 "
fib :: Int -> Int fib 0 = 1 fib 1 = 1 fib n = fib ( n - 2 ) + fib ( n - 1 )Début = fib 7
[Int] fibs x_2 x_1 = [x_2:fibs x_1 (x_2 + x_1)] fib :: Int -> Int fib n = (fibs 1 1) !! n Start = fib 7 "
fibs :: Int Int -> [ Int ] fibs x_2 x_1 = [ x_2 : fibs x_1 ( x_2 + x_1 )]fib :: Int -> Int fib n = ( fibs 1 1 ) !! nDébut = fib 7

Opérateur infixe :

Int (^) x 0 = 1 (^) x n = x * x ^ (n-1) "
( ^ ) infixr 8 :: Int Int -> Int ( ^ ) x 0 = 1 ( ^ ) x n = x * x ^ ( n -1 )

La déclaration de type indique que la fonction est un opérateur infixe associatif à droite de priorité 8 : cela signifie qu’il x*x^(n-1)est équivalent à x*(x^(n-1))par opposition à (x*x)^(n-1). Cet opérateur est prédéfini dans StdEnv, la bibliothèque standard Clean .

Comment fonctionne Clean

Le calcul est basé sur la réécriture et la réduction de graphes . Les constantes, comme les nombres, sont des graphes et les fonctions sont des formules de réécriture de graphes. Ceci, combiné à la compilation en code natif, permet aux programmes Clean, qui utilisent un haut niveau d'abstraction, de s'exécuter relativement rapidement d'après le jeu de benchmarks des langages informatiques (Computer Language Benchmarks Game ) . Un benchmark de 2008 a montré que le code natif Clean offre des performances similaires à celles du compilateur Glasgow Haskell (GHC), selon le benchmark

Compilation

La compilation de Clean en code machine s'effectue comme suit :

  1. Les fichiers sources (.icl) et les fichiers de définition (.dcl) sont traduits en Core Clean, une variante de base de Clean, par le frontend du compilateur écrit en Clean.
  2. Le noyau Clean est converti en langage intermédiaire indépendant de la plateforme Clean (.abc), par le backend du compilateur écrit en Clean et en C.
  3. Le code ABC intermédiaire est converti en code objet (.o) par le générateur de code écrit en C.
  4. Le code objet est lié à d'autres fichiers du module et du système d'exécution et converti en un exécutable normal à l'aide de l' éditeur de liens système (lorsqu'il est disponible) ou d'un éditeur de liens dédié écrit en Clean sous Windows .

Les versions précédentes du compilateur Clean étaient entièrement écrites en C , évitant ainsi les problèmes d'amorçage.

La machine ABC

Le code ABC mentionné ci-dessus est une représentation intermédiaire d'une machine abstraite . La génération de code machine pour le code ABC étant relativement simple, il est facile de prendre en charge de nouvelles architectures. La machine ABC est une machine de réécriture de graphes abstraite impérative . Elle se compose d'un espace de stockage de graphes contenant le graphe Clean en cours de réécriture et de trois piles :

  • La pile A(argument) contient des arguments qui font référence à des nœuds dans le stockage du graphe.
  • La pile B (valeurs de base) contient les valeurs de base (entiers, caractères, nombres réels, etc.). Bien que ces valeurs puissent être des nœuds du graphe de stockage, une pile séparée est utilisée par souci d'efficacité.
  • La pile C(ontrol) contient les adresses de retour pour le contrôle de flux.

Le système d'exécution , intégré à chaque exécutable, construit un Startnœud dans le graphe de stockage et l'empile sur la pile A. Il commence ensuite à l'afficher et à l'évaluer selon les besoins.

Exécuter Clean dans le navigateur

Bien que Clean soit généralement utilisé pour générer des exécutables natifs, plusieurs projets ont permis de développer des applications pour navigateurs web . Le projet SAPL, désormais abandonné , compilait Core Clean en JavaScript et n'utilisait pas de code ABC. Depuis 2019, un interpréteur de code ABC, écrit en WebAssembly , est utilisé à la place.

Plateformes

Clean est disponible pour Microsoft Windows ( IA-32 et X86-64 ), macOS ( X86-64 ) et Linux ( IA-32 , X86-64 et AArch64 ).VersionDateLinuxmacOSOracle SolarisWindowsDiversIA-32x86-64AArch64Motorola 68040PowerPCx86-64SPARCIA-32x86-643.1OS/2 ( i80386 )1.1.2SunOS 4 ( SPARC )1.1OS/2 ( i80386 ); SunOS 4 ( SPARC )1.0OS/2 ( i80386 )0.8.4OS/2 ( i80386 ); SunOS 3-4 ( SPARC )0,7SunOS 3–4 ( SPARC )

Comparaison avec Haskell

La syntaxe de Clean est très similaire à celle de Haskell, avec quelques différences notables. En général, Haskell a introduit plus de sucre syntaxique que Clean :

HaskellFaire le ménageRemarques
compréhension de liste
opérateur de conseil
type de données algébriques
..."
( Éq a , Éq b ) => ...

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index