¿Qué lenguaje es mejor para la programación de propósito general, F # o Haskell? [cerrado]

StackOverflow https://stackoverflow.com/questions/142878

  •  02-07-2019
  •  | 
  •  

Pregunta

Actualmente estoy aprendiendo Haskell. ¿Qué idioma (F # o Haskell) prefieres para programar aplicaciones de propósito general?

¿Cuál crees que es el lenguaje más fuerte?

¿Fue útil?

Solución

Iría por Haskell. HackageDB es una excelente colección de bibliotecas escritas específicamente para el idioma. En el caso de F #, tendría que usar principalmente bibliotecas que no están escritas con un lenguaje funcional en mente para que no sean tan "elegantes" de usar. Pero, por supuesto, depende en gran medida de la cantidad de programación funcional que desee realizar y las restricciones del proyecto para el que desea utilizarla. Incluso "propósito general" no significa que deba usarse en todos los casos;)

Otros consejos

Prefiero Haskell.

La afirmación de Jon Harrop de que Haskell tiene herramientas deficientes me hizo pensar un poco, ya que no estoy de acuerdo con esto. Creo que el problema aquí es en parte uno de estilo de desarrollo. Comparemos algunas características relacionadas con las herramientas de F # y GHC:

  1. F # tiene herramientas visuales extensas y GHC no tiene ninguna. Para mí, la falta de herramientas visuales es irrelevante: trabajo con vi, una línea de comandos Unix y un sistema de compilación altamente personalizado. La falta de soporte para mi estilo de desarrollo en F # sería muy difícil para mí. Por otro lado, si prefiere trabajar en un entorno de tipo Visual-Studio, tendrá una opinión totalmente contraria.

  2. F # y / o .NET Entiendo que tiene un depurador muy bueno. GHC solo tiene un depurador limitado que se ejecuta en el intérprete. No he usado un depurador en años (mucho de esto debido al uso de desarrollo guiado por pruebas) y cuando se trabaja principalmente con funciones puras, como en Haskell, un depurador es mucho menos necesario. Entonces, para mí, la falta de esta herramienta es bastante irrelevante.

  3. Bibliotecas. Esto depende principalmente de las bibliotecas que necesita, ¿no es así? Muchas de las buenas no ayudan si la que necesita no está allí, y tener muchas bibliotecas mal diseñadas puede no ser tan útil. Haskell ciertamente tiene menos bibliotecas que .NET, pero tiene una selección razonable, y la calidad del diseño de la API en muchas de ellas es muy, muy alta.

No sé cómo es la interfaz de F # en las bibliotecas de código nativo, pero GHC es genial para esto, debido a la fantástica FFI. Escribí un servidor Windows DDE completamente en Haskell (sí, no una línea de C, ni siquiera para tratar las devoluciones de llamadas de las bibliotecas de Windows C) y tomó mucho menos tiempo y fue considerablemente más sencillo que hacer lo mismo en C o C ++. Si necesita interfaces de código nativo, Haskell es la mejor opción.

La " imprevisibilidad " El uso de memoria y el rendimiento es un buen punto. Haskell me parece bastante predecible si sabes lo que estás haciendo, pero no sabrás lo que estás haciendo cuando empiezas y tendrás mucho que aprender. F # es mucho más similar a otros lenguajes .NET.

En general, esta pregunta probablemente se deba más a la plataforma que al lenguaje: la enorme diferencia entre el " Mundo Unixy " de GHC que genera código nativo y el " Windowsy world " de F # ejecutándose en .NET no es un problema de idioma.

Yo diría F #, ya que puedes acceder a todo el framework .Net. Sin embargo, eso es más bien una cosa de la biblioteca.

Depende de lo que quieras hacer:

Haskell es el lenguaje más puramente funcional de los dos.

F # es más un lenguaje híbrido, y no es puramente funcional, pero tiene un gran conjunto de bibliotecas de clase base que puedes usar para hacer cosas modernas fácilmente en Windows o Mono.

Creo que Jon Harrop tiene una seria decepción sobre Haskell por alguna razón. Simplemente no es cierto que no se use fuera de la academia, de hecho, se usa ampliamente en banca de inversión y mucho más que F # y OCaml, y por una buena razón. Si desea una programación funcional de trabajo, aprenda Haskell, ya que hay muchos más anuncios anunciados para programadores de Haskell que F # o OCaml. Estoy seguro de que F # ganará popularidad ya que tiene Microsoft detrás y está empezando desde cero, pero en este momento Haskell tiene una clara ventaja.

Probablemente hace 2 o 3 años, OCaml lideró el campo en lenguajes funcionales prácticos, pero desde entonces Haskell lo ha superado con más bibliotecas, más funciones, mejor rendimiento y un uso comercial más amplio.

Puede encontrar esta publicación del blog de Neil Mitchell informativa:

F # Desde una perspectiva de Haskell

Los comentarios también son esclarecedores.

Diría que depende de por qué lo estás aprendiendo. Si lo estás haciendo por la experiencia de un lenguaje funcional puro, elige Haskell. Pero si definitivamente va a utilizar el idioma para más que eso, F # es la mejor opción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top