Articulo de referencia

PureScript

{{cite web|url=https://github.com/purescript/purescript/blob/master/LICENSE|title=purescript/purescript|website=GitHub|date=3 June 2022}} "},"file ext":{"wt":".purs"},"influence...

PureScript es un lenguaje de programación funcional y fuertemente tipado que se transpila a JavaScript [ 2 ] y, con backends alternativos, a C++11 [ 3 ] , Erlang [ 4 ] y Go [ 5 ] . Puede utilizarse para desarrollar aplicaciones web, aplicaciones del lado del servidor y también aplicaciones de escritorio con Electron o mediante compiladores de C++11 y Go con bibliotecas adecuadas. Su sintaxis es en su mayor parte comparable a la de Haskell . Además, introduce polimorfismo de filas y registros extensibles [ 6 ] . Asimismo, a diferencia de Haskell, el lenguaje PureScript se define con una estrategia de evaluación estricta [ 7 ] , aunque existen backends no conformes que implementan una estrategia de evaluación perezosa [ 8 ] . Es software libre y de código abierto publicado bajo una licencia BSD de 3 cláusulas .

Historia

PureScript fue diseñado inicialmente por Phil Freeman en 2013. Comenzó a trabajar en él porque no estaba satisfecho con otros intentos de transcompilar Haskell a JavaScript (por ejemplo, usando Fay, Haste o GHCJS). [ 9 ]

Desde entonces ha sido adoptado por la comunidad y se desarrolla en GitHub . Otras herramientas centrales desarrolladas por la comunidad incluyen la herramienta de compilación dedicada Pulp , [ 10 ] el directorio de documentación Pursuit , [ 11 ] y el gestor de paquetes Spago . [ 12 ]

Características

PureScript presenta evaluación estricta , estructuras de datos persistentes e inferencia de tipos . Su sistema de tipos de datos comparte muchas características con las de lenguajes funcionales similares como Haskell : tipos de datos algebraicos y coincidencia de patrones , tipos de orden superior , clases de tipos , dependencias funcionales y polimorfismo de rango superior . Su sistema de tipos agrega soporte para polimorfismo de filas y registros extensibles, [ 13 ] pero no admite algunas de las características más avanzadas de Haskell, como el tipo de datos algebraico generalizado (GADT) y la familia de tipos .

Los transpiladores de PureScript intentan producir código legible, siempre que sea posible. A través de una interfaz de función externa (FFI) simple, también permite la reutilización de código fuente existente en JavaScript, [ 14 ] C++11, [ 15 ] [ 16 ] y Go, [ 17 ] generalmente como una representación intermedia .

PureScript admite la compilación incremental y la distribución del transpilador a JavaScript admite la creación de complementos de editor de código fuente para el desarrollo iterativo. [ 18 ] Existen complementos de editor para muchos editores de texto populares, incluidos Vim , Emacs , Sublime Text , Atom y Visual Studio Code .

PureScript admite el desarrollo basado en tipos mediante su función de huecos tipados , [ 19 ] en la que se puede construir un programa con subexpresiones faltantes. El transpilador de JavaScript intentará posteriormente inferir los tipos de las subexpresiones faltantes e informará de dichos tipos al usuario. Esta función inspiró un trabajo similar en el compilador Glasgow Haskell (GHC). [ 20 ]

Ejemplos

Aquí tenéis un programa mínimo de "¡Hola, mundo!" en PureScript:

módulo principal donde import Effect.Console (log) principal = registro "¡Hola mundo!"

Aquí, el transpilador de PureScript infiere y verifica el tipo del programa. Una versión más detallada del mismo programa podría incluir anotaciones de tipo explícitas:

módulo principal donde Importar Preludio importar Efecto (Efecto) import Effect.Console (log) principal :: Unidad de efectos principal = registro "¡Hola mundo!"

Véase también

Referencias

  1. "purescript/purescript" . GitHub . 3 de junio de 2022.
  2. "Transpilador de PureScript a JavaScript" . GitHub . Consultado el 22 de enero de 2023 .
  3. "Transpilador de PureScript a C++11" . GitHub . Consultado el 22 de enero de 2023 .
  4. purerl - el backend de PureScript Erlang , purerl, 4 de septiembre de 2023 , consultado el 5 de septiembre de 2023
  5. "Transpilador de PureScript a Go" . GitHub . Consultado el 22 de enero de 2023 .
  6. "PureScript" . purescript.org . Consultado el 14 de marzo de 2019 .
  7. "purescript/documentation" . PureScript. 19 de febrero de 2023. Consultado el 20 de febrero de 2023 .
  8. Backends alternativos , PureScript, 19/02/2023 , consultado el 20/02/2023
  9. "Leer PureScript con ejemplos" . Leanpub.com . Consultado el 14 de marzo de 2019 .
  10. Una herramienta de compilación para proyectos PureScript , PureScript Contrib, 8 de marzo de 2019 , consultado el 14 de marzo de 2019.
  11. "Persecución" . pursuit.purescript.org . Consultado el 14 de marzo de 2019 .
  12. Gestor de paquetes y herramienta de compilación PureScript con tecnología Dhall y package-sets: spacchetti/spago , spacchetti, 14/03/2019 , consultado el 14/03/2019
  13. "Documentación para el lenguaje, compilador y herramientas PureScript: purescript/documentation" . PureScript. 14 de marzo de 2019. Consultado el 14 de marzo de 2019 .
  14. "La interfaz de funciones externas" . PureScript. 15 de julio de 2015. Consultado el 22 de enero de 2023 .
  15. "FFI" . PureScript. 26 de julio de 2019. Consultado el 22 de enero de 2023 .
  16. Implementaciones de exportación externa de C++ para la biblioteca estándar , PureScript, 26/07/2019 , consultado el 22/01/2023
  17. "Implementaciones de exportación extranjeras para la biblioteca estándar" . PureScript. 13 de diciembre de 2020. Consultado el 22 de enero de 2023 .
  18. Hegemann, Christoph (kritzcreek) (2019-04-21). "purs ide: Editor y soporte de herramientas para el lenguaje de programación PureScript" . Recuperado el 2019-04-21 .
  19. Hegemann, Christoph (27 de octubre de 2016). Implementación de búsqueda dirigida por tipo para PureScript (tesis de licenciatura).
  20. Gissurarson, Matthías Páll (27 de septiembre de 2018). "Sugerencias de ajustes válidos de agujeros para agujeros tipificados (Informe de experiencia)" . Avisos de ACM SIGPLAN . 53 (7): 179–185 . doi : 10.1145/3299711.3242760 . S2CID 218480974 . 
  • Sitio web oficialEdita esto en Wikidata
  • PureScript Playground