Haskell
Keywords: Haskell, Años 1980, Compiladores, De facto, Factorial, Haskell Curry, Intérprete, Lenguaje de programación
Haskell es un lenguaje de programación funcional e interpretado que obtuvo su nombre del lógico Haskell Curry. Fue creado por un comité en los años 1980 con el objetivo específico de definir dicho lenguaje.
El lenguaje evoluciona rápidamente con y (ver más abajo) como los representantes actuales del estándar de facto. El último estándar semi-oficial es Haskell 98, con la intención de especificar una versión mínima y compatible del lenguaje como base para futuras extensiones y para su enseñanza.
Las características más interesantes de Haskell incluyen el soporte para tipos de datos y funciones recursivas, listas, tuplas, guardas y reconocimiento de patrones. La combinación de las mismas pueden resultar en algunas funciones casi triviales cuya versión en lenguajes imperativos pueden llegar a resultar extremadamente tediosas de programar. Haskell es, desde 2002, uno de los lenguajes funcionales sobre los que más se ha investigado. Se han desarrollado muchas variantes:
- Versiones paralelas del MIT y Glasgow, ambas denominadas Parallel Haskell.
- Más versiones paralelas y distribuídas de Haskell llamadas Distributed Haskell (anteriormente Goffin) y Eden
- Una version con ejecución especulativa: Eager Haskell
- Varias versiones orientadas a objetos: Haskell++, O'Haskell y Mondrian.
- Una versión educativa llamada Gofer desarrollada por Mark Jones que fue suplantada por HUGS (ver abajo).
Para información más detallada, referirse al sitio oficial y/o a los links al final de éste artículo.
Nota: Este artículo es traducción de la versión inglesa - Haskell
Ejemplos
La definición clásica de la función factorial
fac 0 = 1 fac n = n * fac (n - 1)
O una versión más estilizada usando una notación especial para listas y la función estándar product:
facs n = product [1..n]
Una implementación muy simple que devuelve el enésimo término de la sucesión de Fibonacci:
fib 0 = 0 fib 1 = 1 fib n = fib (n - 2) + fib (n - 1)
Una versión que responde en tiempo lineal aprovechando las tuplas:
fibs 0 = (0,1) fibs n = (b,a+b) where (a,b) = fibs (n-1)
Implementaciones
Todas las siguientes implementaciones cumplen en su totalidad, o casi en su totalidad, con los estándares de Haskell 98 y son distribuídas bajo licencias Open Source. No se conocen implementaciones comerciales del lenguaje.
- Hugs ([1]) es un intérprete. Ofrece una compilación rápida de los programas y un tiempo rasonable de ejecución. También viene con una librería gráfica muy simple, lo que la hace adecuada para quienes lo están aprendiendo. Sin embargo no es una implementación a despreciar, es una de las más livianas y compatibles.
- GHC ([2]): "Glasgow Haskell Compiler" compila a código nativo en una variedad de arquitecturas y puede también compilar a C. Es, probablemente, una de los compiladores más populares e incluso tiene unas cuantas librerías (por ejemplo OpenGL) que, aunque muy útiles, sólo funcionarán bajo GHC.
- nhc98 ([3]) es otro compilador con un mejor tiempo de ejecución que Hugs. Ésta implementación se enfocó a minimizar la utilización de la memoria convirtiéndola en una buena opción para arquitecturas lentas y/o antiguas.
- HBC ([4]) es otro compilador a código nativo de Haskell. Si bien no ha sido actualizada en el último tiempo sigue siendo bastante útil.
- Helium ([5]) es un nuevo dialecto de Haskell. Se focalizó en ser muy fácil de aprender; por ello, no incluye soporte para todo el estándar de Haskell haciendo que no sea totalmente compatible.
Vínculos Externos
Inglés:
- Página Oficial de Haskell
- Wiki de Haskell
- Una Simple Introducción a Haskell 98 (pdf format)
- La Evolución de un Programador de Haskell (una forma cómica de ver los distintos estilos de programación de Haskell)
- Una bibliografía de las Investigaciones en Haskell
Español:
- REDIRECT Plantilla:Lenguajes de programación
