🇪🇸 10 razones para usar Haskell

:es: Traducción al español de 10 Reasons to Use Haskell por Rodrigo.

Publicado en Serokell, el 29 de Abril de 2020.


Haskell es una mezcla de investigación de vanguardia y tecnología bien probada y comprobada a lo largo del tiempo. Ocupa una posición única entre la academia y la industria.

Algunas de sus características, como la recolección de basura (garbage collection) y la generación de código nativo, se pueden encontrar en los principales lenguajes. Otras características, como la pureza y la evaluación perezosa (o llamada por necesidad), son compartidas sólo por los lenguajes menos populares y especializados. Sin ningún orden en particular, he aquí los rasgos más notables de Haskell:

  1. Seguridad en memoria. El manejo manual de la memoria en C y C++ a menudo conduce a desbordamientos del búfer, uso innecesario, fugas de memoria y otros errores relacionados con la memoria. Esto da lugar a vulnerabilidades de seguridad. Es poco probable que el software escrito en Haskell presente tales problemas, gracias a la gestión automática de la memoria. La seguridad de la memoria es un rasgo común entre los lenguajes modernos, incluyendo Java, Python, Go, JavaScript, Rust y otros, y es absolutamente esencial para escribir software seguro.

  2. Recolección de basura. Hay dos maneras de lograr la seguridad de la memoria: la recolección de basura (más común) y el chequeo de vida estática (la forma de Rust). Si bien la recolección de basura hace que Haskell sea menos adecuado para los sistemas que ejecutan en tiempo real, como los juegos de computadora, es menos limitante que el chequeo de vida útil, facilitando así mejores abstracciones y una mayor productividad del desarrollador.

  3. Código nativo. A diferencia de Python, Ruby, JavaScript, Lua y otros lenguajes interpretados, Haskell se compila con anticipación, directamente al código nativo de la máquina. El compilador (GHC) es notablemente bueno en la optimización y generación de ejecutables eficientes. Esto hace que Haskell sea una gran elección para aplicaciones que requieren un buen rendimiento, como el procesamiento de datos de alto rendimiento.

  4. Tipos estáticos. Al igual que Java y a diferencia de JavaScript, Haskell tiene un verificador de tipos que valida el código durante el desarrollo. Esto significa que muchos errores se detectan al principio del ciclo de desarrollo, antes de que el producto llegue a los usuarios o incluso antes de la instancia del control de calidad. Además, el desarrollador puede estudiar el modelo de datos programado en tipos para entender mejor el dominio del negocio.

  5. Tipos enriquecidos. A diferencia de Java o Go, donde los tipos estáticos a menudo resultan ser una molestia, el sistema de tipos de Haskell es lo suficientemente poderoso como para convertirse en una conveniencia. Con soporte para tipos de datos algebraicos, polimorfismo paramétrico, polimorfismo basado en clases (ad-hoc), familias de tipos, igualdad de tipos, cuantificación existencial, polimorfismo de rango superior, polimorfismo de tipos, inspección de tipos en tiempo de ejecución, Haskell ofrece un conjunto de herramientas extremadamente versátil para escribir programas escritos estáticamente.

  6. Pureza. El diseño de Haskell se centra en funciones puras y datos inmutables. Una y otra vez, estas características han demostrado ser esenciales para escribir un software correcto. El manejo del estado global, de los datos inmutables y de los efectos secundarios es propenso a errores, y Haskell le presta al programador todas las herramientas para evitar o minimizar estas fuentes de complejidad.

  7. Pereza. Desde el principio, Haskell fue concebido como un lenguaje perezoso, y hasta el día de hoy la evaluación perezosa sigue siendo su característica principal. La idea es retrasar el cálculo de una expresión hasta que su valor sea necesario (también evita repetir la evaluación en caso de ser necesaria en posteriores ocasiones), y las consecuencias son la facilidad de refactorización, la capacidad de definir estructuras de control personalizadas, y la mejora de la componibilidad.

  8. Concurrencia. En muchos idiomas, la concurrencia es una fuente inagotable de problemas, pero en Haskell es bastante sencilla de gestionar. Los hilos verdes (subprocesos programados por una biblioteca de tiempo de ejecución o una máquina virtual en lugar de ser nativos por el sistema operativo subyacente), las increíbles bibliotecas como async y stm, y la ubicuidad de las funciones puras hacen que escribir aplicaciones concurrentes en Haskell sea un placer en lugar de un dolor de cabeza.

  9. Metaprogramación. Haskell apoya la inspección y generación del árbol de sintaxis abstracta del programa. Esta característica se llama Template Haskell, y se utiliza para la evaluación en tiempo de compilación y para automatizar la generación de plantillas.

  10. Ecosistema. Hackage es un repositorio centralizado de software de código abierto de Haskell, con más de 14.000 paquetes. Stackage es una colección curada de versiones de paquetes que garantiza la compatibilidad entre las librerías, que contiene más de 2.000 paquetes bien mantenidos. No es raro descubrir que el problema que se está resolviendo ya ha sido resuelto con anterioridad, y enviado como una librería de código abierto.

Conclusión

Haskell es la principal tecnología que nos ayuda a entregar software de alta calidad. Hay varios criterios para juzgar la calidad del software, pero los más importantes son la corrección, el rendimiento y la mantenibilidad. Haskell facilita la escritura de código que obtiene una alta puntuación en todos estos apartados:

  • Correctitud. Una fuerte tipificación estática, pureza y datos inmutables, son esenciales para escribir un código que se adhiera a las especificaciones. El software escrito en Haskell tiende a ser seguro, confiable y libre de errores.
  • Rendimiento. GHC (The Glasgow Haskell Compiler) genera ejecutables nativos optimizados. Su sistema de ejecución soporta hilos verdes, y se envía con un recolector de basura multi-generacional. Haskell es una elección perfecta para aplicaciones concurrentes de alta carga, como los backends web.
  • Mantenimiento. Haskell alienta el uso del sistema de tipos para modelar el dominio del negocio y hacer explícitos los supuestos. Como resultado, refactorizar el código y adaptarlo a los requerimientos cambiantes es mucho más fácil.
1 Like