Article de reference

Nettoyer (langage de programmation)

Clean est un langage de programmation purement fonctionnel à usage général . Appelé à l'origine Concurrent Clean System ou Clean System il a été développé par un groupe de cherc...

Clean est un langage de programmation purement fonctionnel à usage général . Appelé à l'origine Concurrent Clean System ou Clean System il a été développé par un groupe de chercheurs de l' Université Radboud de Nimègue depuis 1987. Bien que le développement du langage ait ralenti, certains chercheurs travaillent toujours sur le langage. En 2018, une société dérivée a été fondée qui utilise Clean.

Caractéristiques

Clean partage de nombreuses propriétés et syntaxes avec un langage plus jeune, Haskell : transparence référentielle , compréhension de liste , gardes , ramasse-miettes , fonctions d'ordre supérieur , currying et évaluation paresseuse . Cependant, Clean gère l'état mutable et les entrées/sorties (E/S) via un système de types d'unicité , contrairement à l'utilisation de monades par Haskell . Le compilateur tire parti du système de types d'unicité pour générer un code plus efficace, car il sait qu'à tout moment pendant l'exécution du programme, une seule référence peut exister vers une valeur avec un type unique. Par conséquent, une valeur unique peut être modifiée sur place .

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

Exemples

Bonjour le monde :

Démarrer = "Bonjour tout le monde !"

Factorielle :

Suite de Fibonacci :

Opérateur infixe :

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

La déclaration de type stipule que la fonction est un opérateur infixe associatif droit avec une priorité de 8 : cela signifie que 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

L'informatique est basée sur la réécriture et la réduction de graphes . Les constantes telles que 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 une abstraction élevée de s'exécuter relativement rapidement selon The Computer Language Benchmarks Game . Un benchmark de 2008 a montré que le code natif Clean fonctionne de manière similaire au compilateur Glasgow Haskell (GHC), selon le benchmark.

Compilation

La compilation du code Clean to 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 compilateur frontal écrit en Clean.
  2. Core Clean est converti en langage intermédiaire indépendant de la plate-forme Clean (.abc), par le backend du compilateur écrit en Clean et 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 du lieur système (lorsqu'il est disponible) ou d'un lieur dédié écrit en Clean sous Windows .

Les versions antérieures 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 . Étant donné que la génération de code machine pour le code ABC est relativement simple, il est facile de prendre en charge de nouvelles architectures. La machine ABC est une machine de réécriture de graphes abstraits impérative . Elle se compose d'un magasin de graphes pour contenir le graphe Clean en cours de réécriture et de trois piles :

  • La pile A(rgument) contient des arguments qui font référence aux nœuds du magasin de graphes.
  • La pile B(valeur asique) contient les valeurs de base (entiers, caractères, réels, etc.). Bien que ces valeurs puissent être des nœuds dans le magasin de graphes, une pile distincte est utilisée pour plus d'efficacité.
  • La pile de contrôle contient les adresses de retour pour le contrôle de flux.

Le système d'exécution , qui est lié à chaque exécutable, construit un Startnœud dans le magasin de graphes et le pousse sur la pile A. Il commence ensuite à l'imprimer, en l'évaluant selon les besoins.

Exécution de Clean dans le navigateur

Bien que Clean soit généralement utilisé pour générer des exécutables natifs, plusieurs projets ont permis d'activer des applications dans les navigateurs Web . Le projet SAPL, désormais abandonné, a compilé Core Clean en JavaScript et n'a pas utilisé de code ABC. Depuis 2019, un interpréteur pour le 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 ).

Certaines bibliothèques ne sont pas disponibles sur toutes les plateformes, comme ObjectIO qui n'est disponible que sur Windows. De plus, la fonctionnalité permettant d'écrire des données dynamiques dans des fichiers n'est disponible que sur Windows.

La disponibilité de Clean par plateforme varie selon chaque version :

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 :

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