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
- Elm (lenguaje de programación) – Lenguaje de programación funcional
- Reason (lenguaje de programación) : extensión de sintaxis y conjunto de herramientas para OCaml.
- JS++ – Lenguaje de programación web
- TypeScript : lenguaje de programación y superconjunto de JavaScript.
Referencias
- ↑ "purescript/purescript" . GitHub . 3 de junio de 2022.
- ↑ "Transpilador de PureScript a JavaScript" . GitHub . Consultado el 22 de enero de 2023 .
- ↑ "Transpilador de PureScript a C++11" . GitHub . Consultado el 22 de enero de 2023 .
- ↑ purerl - el backend de PureScript Erlang , purerl, 4 de septiembre de 2023 , consultado el 5 de septiembre de 2023
- ↑ "Transpilador de PureScript a Go" . GitHub . Consultado el 22 de enero de 2023 .
- ↑ "PureScript" . purescript.org . Consultado el 14 de marzo de 2019 .
- ↑ "purescript/documentation" . PureScript. 19 de febrero de 2023. Consultado el 20 de febrero de 2023 .
- ↑ Backends alternativos , PureScript, 19/02/2023 , consultado el 20/02/2023
- ↑ "Leer PureScript con ejemplos" . Leanpub.com . Consultado el 14 de marzo de 2019 .
- ↑ Una herramienta de compilación para proyectos PureScript , PureScript Contrib, 8 de marzo de 2019 , consultado el 14 de marzo de 2019.
- ↑ "Persecución" . pursuit.purescript.org . Consultado el 14 de marzo de 2019 .
- ↑ 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
- ↑ "Documentación para el lenguaje, compilador y herramientas PureScript: purescript/documentation" . PureScript. 14 de marzo de 2019. Consultado el 14 de marzo de 2019 .
- ↑ "La interfaz de funciones externas" . PureScript. 15 de julio de 2015. Consultado el 22 de enero de 2023 .
- ↑ "FFI" . PureScript. 26 de julio de 2019. Consultado el 22 de enero de 2023 .
- ↑ Implementaciones de exportación externa de C++ para la biblioteca estándar , PureScript, 26/07/2019 , consultado el 22/01/2023
- ↑ "Implementaciones de exportación extranjeras para la biblioteca estándar" . PureScript. 13 de diciembre de 2020. Consultado el 22 de enero de 2023 .
- ↑ 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 .
- ↑ Hegemann, Christoph (27 de octubre de 2016). Implementación de búsqueda dirigida por tipo para PureScript (tesis de licenciatura).
- ↑ 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 .
Enlaces externos
- Lenguajes funcionales
- Lenguajes de programación que coinciden con patrones
- Lenguajes de programación creados en 2013
- Lenguajes de programación de tipado estático
- Software de 2013
- Software que utiliza la licencia BSD.