Articulo de referencia

Limpio (lenguaje de programación)

{{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...

Clean es un lenguaje de programación funcional puro 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 siguen trabajando en él. [ 8 ] En 2018, se fundó una empresa derivada que utiliza Clean. [ 9 ]

Características

Clean comparte muchas propiedades y sintaxis con un lenguaje hermano menor, Haskell : transparencia referencial , comprensión de listas , guardas , recolección de basura , funciones de orden superior , currificación y evaluación perezosa . Sin embargo, Clean maneja el estado mutable y la entrada/salida (E/S) a través de un sistema de tipos de unicidad , a diferencia del uso de mónadas de Haskell . El compilador aprovecha el sistema de tipos de unicidad para generar código más eficiente, ya que sabe que en cualquier momento durante la ejecución del programa, solo puede existir una referencia a un valor con un tipo único. Por lo tanto, un valor único puede modificarse directamente . [ 10 ]

La distribución Clean incluye un entorno de desarrollo integrado (IDE) para Microsoft Windows .

Ejemplos

Hola Mundo :

Inicio = "¡Hola, mundo!"

Factorial :

Secuencia de Fibonacci :

Operador infijo :

( ^ ) infixr 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 contraposición a (x*x)^(n-1). Este operador está predefinido en StdEnv, la biblioteca estándar de Clean .

Cómo funciona Clean

La computación 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 ] Una prueba de rendimiento de 2008 demostró que el código nativo de Clean tiene un rendimiento similar al del Glasgow Haskell Compiler (GHC), dependiendo de la prueba. [ 12 ]

Compilación

La compilación de Clean a código máquina se realiza de la siguiente manera:

  1. Los archivos fuente (.icl) y los archivos de definición (.dcl) son traducidos a Core Clean, una variante básica de Clean, por el frontend del compilador escrito en Clean.
  2. El código principal de Clean se convierte en el lenguaje intermedio independiente de la plataforma de Clean (.abc), mediante el backend del compilador escrito en Clean y C.
  3. El código ABC intermedio se convierte a código objeto (.o) mediante el generador de código escrito en C.
  4. El código objeto se enlaza con otros archivos del módulo y del sistema de tiempo de ejecución y se convierte en un ejecutable normal utilizando el enlazador del sistema (cuando esté disponible) o un enlazador dedicado escrito en Clean en Windows .

Las versiones anteriores del compilador Clean estaban escritas completamente en C , evitando así problemas de arranque.

La máquina ABC

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 máquina para el código ABC es relativamente sencilla, es fácil admitir nuevas arquitecturas. La máquina ABC es una máquina imperativa de reescritura de grafos abstractos . [ 13 ] Consta de un almacén de grafos para contener el grafo Clean que se está reescribiendo y tres pilas:

  • La pila A (de argumentos) contiene argumentos que hacen referencia a nodos en el almacén de grafos.
  • La pila B (valor básico) almacena valores básicos (enteros, caracteres, números reales, etc.). Si bien estos valores podrían ser nodos en el almacenamiento del grafo, se utiliza una pila separada para mayor eficiencia.
  • La pila C(control) almacena direcciones de retorno para el control de flujo.

El sistema de ejecución , que está integrado en cada ejecutable, crea un Startnodo en el almacén de grafos y lo coloca en la pila A. A continuación, comienza a imprimirlo y a evaluarlo según sea necesario.

Ejecutando Clean en el navegador

Aunque Clean se usa normalmente para generar ejecutables nativos, varios proyectos han habilitado aplicaciones en navegadores web . El proyecto SAPL, ahora abandonado , compilaba Core Clean a JavaScript y no usaba código ABC. Desde 2019, se usa en su lugar un intérprete de código ABC, escrito en WebAssembly . [ 14 ] [ 15 ]

Plataformas

Clean está disponible para Microsoft Windows ( IA-32 y X86-64 ), macOS ( X86-64 ) y Linux ( IA-32 , X86-64 y AArch64 ).

Algunas bibliotecas no están disponibles en todas las plataformas, como ObjectIO , que solo está disponible en Windows. Asimismo, la función para escribir datos dinámicos en archivos solo está disponible en Windows.

La disponibilidad de Clean por plataforma varía con cada versión: [ 16 ] [ 17 ]

Comparación con Haskell

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áctico que Clean: [ 10 ]

Referencias

  1. "Descargar Clean" . Clean . Consultado el 23 de julio de 2019 .
  2. "Idris - Tipos de singularidad" . Consultado el 20 de noviembre de 2018 .
  3. "Clean 0.7: Léame" . Archivado del original el 24 de mayo de 2019.
  4. "Clean 1.0: Léame" . Archivado del original el 5 de mayo de 2019.
  5. "Clean 1.3: Léame" . Archivado del original el 27 de abril de 2019.
  6. ^ "Universidad Radboud de Nijmegen: Departamento de Ciencia del Software: Software" .
  7. "Preguntas frecuentes" . Limpiar . Consultado el 26 de noviembre de 2021 .
  8. "Publicaciones" . Limpio . Consultado el 26 de noviembre de 2021 .
  9. "Inicio" . Tecnología de software TOP . Consultado el 26 de noviembre de 2021 .
  10. 1 2 "Enlace FTP" (PDF) . ftp.cs.ru.nl ( FTP ).(Para ver los documentos, consulte Ayuda:FTP )
  11. "¿Qué lenguajes de programación son los más rápidos?" . Juego de evaluación comparativa de lenguajes informáticos . Archivado del original el 28 de junio de 2011.
  12. ^ Jansen, Jan Martín; Koopman, Pieter; Plasmeijer, Rinus (2008). «De la interpretación a la recopilación» (PDF) . Servidor FTP ( FTP ) . Consultado el 21 de mayo de 2016 .(Para ver los documentos, consulte Ayuda:FTP )
  13. ^ Koopman, Pieter (10 de diciembre de 1990). Programas funcionales como especificaciones ejecutables (Doctor). Universidad Católica de Nijmegen. pag. 35.ISBN  90-9003689-X.
  14. "Clean and iTasks / ABC Interpreter · GitLab" . Clean and iTasks en GitLab . Consultado el 13 de abril de 2023 .
  15. Staps, Camil; van Groningen, John; Plasmeijer, Rinus (15 de julio de 2021). «Interacción perezosa de código compilado e interpretado para entornos aislados y sistemas distribuidos». Actas del 31.er Simposio sobre Implementación y Aplicación de Lenguajes Funcionales . págs. 1-12 . doi : 10.1145/3412932.3412941 . ISBN  9781450375627. S2CID 202751977 . 
  16. "Historial de versiones" . Limpio . Consultado el 7 de enero de 2022 .
  17. "Índice de /Limpio" . Consultado el 7 de enero de 2022 .
  • Wiki limpia
  • clean-lang.org : registro público con paquetes Clean
  • cloogle.org : un motor de búsqueda para buscar en paquetes Clean.