stringtranslate.com

Limpio (lenguaje de programación)

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]

Características

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 .

Ejemplos

Hola Mundo :

 Inicio = "¡Hola, mundo!"  

Factorial :

Secuencia de Fibonacci :

Operador infijo :

( ^ ) 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 .

Cómo funciona 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]

Compilando

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

  1. Los archivos fuente (.icl) y los archivos de definición (.dcl) se traducen a Core Clean, una variante básica de Clean, mediante la interfaz del compilador escrita en Clean.
  2. El núcleo limpio se convierte al 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 en código objeto (.o) mediante el generador de código escrito en C.
  4. El código objeto se vincula con otros archivos en el módulo y el sistema de ejecución y se convierte en un ejecutable normal mediante el enlazador del sistema (cuando está disponible) o un enlazador dedicado escrito en Clean on Windows .

Las versiones anteriores del compilador Clean se escribieron 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 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 Startnodo 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.

Ejecutar Clean en el navegador

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]

Plataformas

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]

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áctica 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: Readme". Archivado desde el original el 24 de mayo de 2019.
  4. ^ "Clean 1.0: Readme". Archivado desde el original el 5 de mayo de 2019.
  5. ^ "Clean 1.3: Readme". Archivado desde el 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. ^ desde ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
  11. ^ "¿Cuáles son los lenguajes de programación más rápidos?". Juego de referencias de lenguajes informáticos . Archivado desde el original el 28 de junio de 2011.{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
  12. ^ Jansen, Jan Martín; Koopman, Pieter; Plasmeijer, Rinus (2008). «De la interpretación a la recopilación» (PDF) . Consultado el 21 de mayo de 2016 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  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 y iTasks / Intérprete ABC · GitLab". Clean y iTasks en GitLab . Consultado el 13 de abril de 2023 .
  15. ^ Staps, Camil; van Groningen, John; Plasmeijer, Rinus (15 de julio de 2021). "Interfuncionamiento diferido de código compilado e interpretado para sistemas distribuidos y de sandbox". Actas del 31.º Simposio sobre implementación y aplicación de lenguajes funcionales . págs. 1–12. doi :10.1145/3412932.3412941. ISBN 9781450375627.S2CID202751977  .​
  16. ^ "Historial de versiones". Limpiar . Consultado el 7 de enero de 2022 .
  17. ^ "Índice de /Clean" . Consultado el 7 de enero de 2022 .

Enlaces externos