Clean es un lenguaje de programación puramente funcional de propósito general . Originalmente llamado Concurrent Clean System [3] o Clean System , [4] [5] ha sido desarrollado por un grupo de investigadores de la Universidad Radboud en Nijmegen desde 1987. [6] [7] Aunque el desarrollo del lenguaje se ha ralentizado, algunos investigadores todavía están trabajando en él. [8] En 2018, se fundó una empresa derivada que utiliza Clean. [9]
Clean comparte muchas propiedades y sintaxis con un lenguaje hermano menor, Haskell : transparencia referencial , comprensión de listas , guardias , recolección de basura , funciones de orden superior , currying y evaluación diferida . Sin embargo, Clean trata con el estado mutable y la entrada/salida (E/S) a través de un sistema de tipos de unicidad , en contraste con el uso de mónadas de Haskell . El compilador aprovecha el sistema de tipos de unicidad para generar código más eficiente, porque sabe que en cualquier punto durante la ejecución del programa, solo puede existir una referencia a un valor con un tipo único. Por lo tanto, un valor único se puede cambiar en el lugar . [10]
La distribución Clean incluye un entorno de desarrollo integrado (IDE) para Microsoft Windows .
Inicio = "¡Hola, mundo!"
( ^ ) infijo 8 :: Int Int -> Int ( ^ ) x 0 = 1 ( ^ ) x n = x * x ^ ( n -1 )
La declaración de tipo indica que la función es un operador infijo asociativo derecho con prioridad 8: esto indica que x*x^(n-1)
es equivalente a x*(x^(n-1))
en lugar de (x*x)^(n-1)
. Este operador está predefinido en StdEnv, la biblioteca estándar de Clean .
La informática se basa en la reescritura y reducción de grafos . Las constantes como los números son grafos y las funciones son fórmulas de reescritura de grafos. Esto, combinado con la compilación a código nativo, hace que los programas Clean que utilizan un alto nivel de abstracción se ejecuten relativamente rápido según The Computer Language Benchmarks Game . [11] Un benchmark de 2008 mostró que el código nativo Clean funciona de manera similar al Glasgow Haskell Compiler (GHC), según el benchmark. [12]
La compilación de Clean en código de máquina se realiza de la siguiente manera:
Las versiones anteriores del compilador Clean se escribieron completamente en C , evitando así problemas de arranque.
El código ABC mencionado anteriormente es una representación intermedia para una máquina abstracta . Debido a que la generación de código de máquina para código ABC es relativamente sencilla, es fácil admitir nuevas arquitecturas. La máquina ABC es una máquina de reescritura de grafos abstractos imperativos . [13] Consiste en un almacén de grafos para almacenar el grafo limpio que se está reescribiendo y tres pilas:
El sistema de ejecución , que está vinculado a cada ejecutable, crea un Start
nodo en el almacén de gráficos y lo coloca en la pila A. Luego comienza a imprimirlo y a evaluarlo según sea necesario.
Aunque Clean se utiliza normalmente para generar ejecutables nativos, varios proyectos han habilitado aplicaciones en navegadores web . El proyecto SAPL, ahora abandonado, compiló Core Clean en JavaScript y no utilizó código ABC. Desde 2019, se utiliza en su lugar un intérprete para código ABC, escrito en WebAssembly . [14] [15]
Clean está disponible para Microsoft Windows ( IA-32 y X86-64 ), macOS ( X86-64 ) y Linux ( IA-32 , X86-64 y AArch64 ). [ cita requerida ]
Algunas bibliotecas no están disponibles en todas las plataformas, como ObjectIO, que solo está disponible en Windows. Además, la función para escribir dinámicas en archivos solo está disponible en Windows. [ cita requerida ]
La disponibilidad de Clean por plataforma varía con cada versión: [16] [17]
La sintaxis de Clean es muy similar a la de Haskell, con algunas diferencias notables. En general, Haskell ha introducido más azúcar sintáctica que Clean: [10]
{{cite web}}
: CS1 maint: bot: estado de URL original desconocido ( enlace ){{cite journal}}
: Requiere citar revista |journal=
( ayuda )