¿Cuál es el lenguaje de producción más compatible y ampliamente utilizado para exportar los conocimientos y habilidades adquiridos de Haskell?

14

Me gusta Haskell, sencillo y simple. Si bien Haskell se usa en el software de producción, no se implementa especialmente de lo que he visto. ¿Cuál es el lenguaje más similar y aún más utilizado en lo que respecta a los proyectos de producción, de modo que pueda tener la posibilidad de que una bola de nieve utilice algo asombroso en la industria?

¿También está disponible el mismo idioma de la primera parte en un gran número de plataformas? Si no es así, ¿cuál es la mejor alternativa que tiene una implementación de plataforma amplia? Me gustaría un solo idioma para poner en mi lista de tareas pendientes en lugar de un enjambre masivo o familia. La evidencia sólida sería una ventaja.

    
pregunta World Engineer 01.09.2011 - 01:55

5 respuestas

21

Haskell está más estrechamente relacionado con la familia de idiomas ML. Esto incluye cosas como OCaml , por supuesto, pero también F # en la plataforma .NET. Estos idiomas comparten con Haskell la base del sistema de tipos y la forma en que se usan los datos (tipos de datos algebraicos, coincidencia de patrones, inferencia de tipos, etc.) Pueden diferir sustancialmente de Haskell en otros puntos, por supuesto, la mayoría de los NM son estrictos e impuros. Para empezar, y la popularidad de Haskell como vehículo para la investigación en sistemas tipográficos y diseño de idiomas significa que la mayoría de los lenguajes de estilo ML tienden a tener sistemas de tipo menos potentes (pero potencialmente más fáciles de entender). Probablemente sea seguro decir que, si bien puede omitir algunas cosas sobre Haskell, especialmente al principio, la mayoría de los programadores de Haskell probablemente se sentirán cómodamente en casa en un ML bastante rápidamente, en un nivel básico de "hacer las cosas a la altura" . Si quieres un idioma con la misma estructura general que Haskell, un ML es tu mejor apuesta.

El lado funcional de Scala también se basa en gran medida en la tradición de ML, y también incorpora algunas características del sistema de tipo avanzado conocidas de Haskell, así como un sistema OOP más estándar integrado con el anterior . Mientras que OO en lenguajes de estilo ML tiende a considerarse más como un "modelo OO con herramientas funcionales básicas", Scala vive y respira OO de estilo Java. Esto tiene beneficios para la interoperabilidad de Java, como puede imaginar, y presenta un entorno de trabajo más familiar para los programadores de OO. Sin embargo, provenientes de un fondo de Haskell, es más probable que se moleste por las maneras en que la mezcla de cosas en Scala hace que los modismos funcionales sean más torpes y que la mayoría de las API de Java están mal diseñadas y son innecesariamente difíciles de usar. Entonces, si desea algo con un sistema de tipo sofisticado que permita la traducción directa de muchas cosas en Haskell (con una sobrecarga sintáctica adicional) y no le importe comprometer el estilo funcional, podría disfrutar de Scala.

Finalmente, si bien puede parecer extraño considerarlo, Clojure en realidad tiene muchas cosas en común con Haskell a un nivel más filosófico. La mayor parte de lo que encontrará en el enfoque de Clojure para estado y valores vs. identidades es muy cercano a lo que Haskell formaliza a través del sistema de tipos. . En consecuencia, Clojure enfatiza la interoperabilidad de Java en un grado menor y no se preocupa tanto por arrastrar OOP, por lo que de alguna manera el enfoque de Clojure a la programación funcional en sí misma puede ser lo más cercano a lo que ya conoce. . Creo que es revelador en este sentido que, a mi entender, Clojure es el único lenguaje además de Haskell que tiene una implementación de STM eso es simple, efectivo y simplemente funciona. Por otro lado, Clojure proviene de la tradición de Lisp y, por lo tanto, carece del sistema de tipo estático y el énfasis en los tipos de datos algebraicos y la coincidencia de patrones que se encuentran en los idiomas influenciados por el ML. Y, por supuesto, es un Lisp, que en sí mismo es negativo para algunas personas (aunque realmente no sé por qué).

Hablando por mí mismo, con el descargo de responsabilidad de que mi primera experiencia con la programación funcional fue en Scheme, probablemente me inclinaría por Clojure, con OCaml como una segunda opción.

    
respondido por el C. A. McCann 01.09.2011 - 03:12
4

Yo nunca lo usé, pero a veces veo que Scala aparece en los blogs o en las descripciones de proyectos y creo que tomó conceptos importantes de Haskell. Scala se compila hasta la JVM y puede interoperar con Java.

    
respondido por el Jürgen Strobel 01.09.2011 - 02:01
3

Una alternativa funcional es Erlang . Si bien es un lenguaje muy concurrente, el subconjunto secuencial es un lenguaje puramente funcional con muchas de las propiedades de los lenguajes funcionales, por ejemplo, cierres, datos inmutables y comparación de patrones. Se ejecuta en muchas plataformas, incluyendo linux, varios unixes, windows y macosx. Ahora hay incluso una implementación en la JVM, erjang . Puede comunicarse fácilmente y coexistir con otros idiomas, así es como se usa a menudo.

Consulte el sitio principal .

    
respondido por el rvirding 01.09.2011 - 14:45
3

Clojure se usa cada vez más, y aunque no se parece a Haskell a un nivel superficial, si miras un poco más profundamente, está claramente inspirado en Haskell y fomenta un estilo funcional muy similar.

Las características clave de Clojure que los usuarios de Haskell pueden encontrar familiares y atractivas:

  • El lenguaje central es puramente funcional , mientras que los efectos secundarios son posibles, están ocultos en lugares específicos (por ejemplo, referencias STM, funciones IO, interoperabilidad de Java)
  • Todas las estructuras de datos son inmutables y persistentes
  • La pereza : logrado en gran medida a través de las omnipresentes secuencias perezosas de Clojure, esto resultará muy familiar para los usuarios de Haskell. Las secuencias perezosas infinitas están bien.
  • Memoria transaccional de software : es la principal forma de manejar el estado mutable en Clojure. Vale la pena ver este excelente video donde Rich Hickey explica el enfoque de Clojure a la identidad y el estado: enlace

Las diferencias clave (pueden ser positivas o negativas dependiendo de su perspectiva):

  • Es impuro, aunque mi observación es que el estilo idiomático de Clojure es pegar funciones puras siempre que sea posible.
  • Escritura dinámica en lugar de estática (aunque las sugerencias de tipo estático se pueden usar opcionalmente para optimizar el rendimiento)
  • Es un idioma de JVM con fácil acceso a todo el ecosistema de la biblioteca de Java. Esta es, en mi opinión, la mayor ventaja en términos de aplicabilidad en el mundo real.
  • sintaxis Lisp. Así que obtienes todos los beneficios de homoiconicity , a costa de tener que aprender a ver a través de todos los paréntesis: -)

Perspectiva personal: aprendí Haskell antes que Clojure y me encantó Haskell por su elegancia y pureza matemática. Clojure se inspira y toma muchas características buenas de Haskell, pero es un lenguaje mucho más pragmático / práctico. Especialmente cuando se cuenta el enorme valor de poder aprovechar el ecosistema de la biblioteca de Java, es un gran lenguaje para "hacer las cosas".

    
respondido por el mikera 22.11.2011 - 18:32
1

Si te gusta Haskell, pero tienes que hacer un código para la JVM, frege puede ser interesante para ti. Está diseñado para ser lo más cercano posible a Haskell 2010, pero genera código Java.

Por supuesto, frege en sí no se parece en nada al "lenguaje de producción ampliamente utilizado" (se publicó recientemente), pero Java sí lo es.

    
respondido por el Ingo 01.09.2011 - 10:35

Lea otras preguntas en las etiquetas