¿Cómo puedo utilizar la programación funcional en el mundo real? [cerrado]

103

Los lenguajes funcionales son buenos porque evitan errores al eliminar el estado, pero también porque se pueden paralelizar fácilmente de forma automática, sin que tenga que preocuparse por el número de subprocesos.

Sin embargo, como desarrollador de Win32, ¿puedo usar Haskell para algunos archivos DLL de mi aplicación? Y si lo hago, ¿hay alguna ventaja real que se aproveche automáticamente para mí? Si es así, ¿qué me da esta ventaja, el compilador?

¿F # paraleliza las funciones que escribe en múltiples núcleos y cpu automáticamente para usted? ¿Vería alguna vez aumentar el número de subprocesos en el administrador de tareas?

Básicamente, mi pregunta es, ¿cómo puedo comenzar a usar Haskell de una manera práctica? ¿Veré realmente algunos beneficios si lo hago?

Brian R. Bondy
fuente
2
Personalmente, buscaría erlang, pero ese soy yo.
Jason Bunting
2
Para aclarar un poco, ya tengo experiencia con algunos lenguajes de programación funcional diferentes, y sé cómo funcionan y cuáles son sus diferencias. Pero esta pregunta es específicamente: ¿cómo lo llevo a un uso del mundo real?
Brian R. Bondy
1
posible duplicado de ¿Por qué lenguajes funcionales?

Respuestas:

41

Parece que el libro Real World Haskell es justo lo que estás buscando. Puedes leerlo gratis en línea:

http://book.realworldhaskell.org/

Apocalipsis
fuente
Estoy esperando a que se imprima. Parece que será uno de los mejores libros que existen. Apuesto a que servirá a las personas interesadas en Haskell mejor que Practical Ocaml para Ocaml
Friedrich
25

F # no contiene ningún polvo mágico de duendes que pasará funciones a diferentes CPU o máquinas. Lo que hacen F # / Haskell y otros lenguajes de programación funcional es facilitarle la escritura de funciones que se pueden procesar independientemente del hilo o CPU en el que se crearon.

No me siento bien al publicar un enlace aquí a un podcast en el que participo, parece un poco fuera de lugar, pero en el episodio de Herding Code donde hablamos con Matt Podwysocki hicimos la misma pregunta y él dio algunas respuestas interesantes. También hay muchos enlaces buenos relacionados con la programación funcional en ese episodio. Encontré títulos de un enlace " Por qué es importante la programación funcional " que pueden proporcionarle algunas respuestas.

ScottKoon
fuente
21
Luego, publicaré para ti: herdingcode.com/?p=45 :)
Brian R. Bondy
14

Esto también puede ser interesante: " Programación funcional del mundo real "

Los ejemplos están en F # y C #, pero la teoría es bastante genérica. Por lo que he leído (pre-lanzamiento), es definitivamente interesante, pero hasta ahora creo que me está dando ganas de apegarme cada vez más a C #, usando bibliotecas como Parallel Extensions.

Marc Gravell
fuente
¿Todavía sientes que "quieres seguir más y más con C #"? F # ofrece algunas características interesantes. El mayor impulso que he recibido es escribir menos (lo que significa menos fricción en el proceso de expresar soluciones en código).
Daniel
1
@Daniel de alguna manera, incluso más; p Sin embargo, las herramientas con las que trabajo pueden ser atípicas.
Marc Gravell
8

No mencionaste, pero supongo, que estás usando C ++. Una forma potencialmente fácil de entrar en funcionamiento es a través de C ++ / CLI a F #. C ++ contiene "polvo mágico de duendes" (llamado IJW: It Just Works) para permitirle entrar y salir del código administrado. Con esto, llamar al código F # es casi tan simple como lo es desde C #.

He usado esto en un programa (FreeSWITCH), que está escrito completamente en C / C ++. Con un solo C ++ / CLI administrado (use el interruptor / clr), mágicamente se convierte en código administrado, y desde allí, puedo cargar mis complementos de F # y ejecutarlos. Para facilitar aún más la implementación, F # puede vincular estáticamente todas sus dependencias, por lo que no es necesario implementar los archivos de tiempo de ejecución de F #. Otra cosa que hace que el código CLR sea atractivo es que puede pasar el código administrado (delegados) al código C, y el tiempo de ejecución lo crea automáticamente.

Si decide seguir el camino de Haskell, la característica que estará buscando es FFI: Interfaz de función externa. Sin embargo, no creo que le proporcione el mismo nivel de integración que C ++ / CLI con F #.

MichaelGG
fuente
6

Actualmente estoy aprendiendo Haskell, cuando empiezas a aprenderlo, no parece muy intrigante porque la experiencia de aprendizaje no es NADA como aprender un idioma como C #, es un mundo completamente nuevo, pero noté que podía escribir muy, muy complejo expresiones en solo unas pocas líneas de código, cuando volví a mirar el código, era mucho más conciso, era pequeño y ajustado. ¡Me encanta! De hecho, puede escribir programas del mundo real que serán más pequeños, más fáciles de mantener y mucho más complejos de lo que permiten la mayoría de los otros lenguajes, ¡¡voto para que lo aprenda !!

Buena suerte.

Rayne
fuente
4

Dado que menciona Win32 y DLL, supongo que está trabajando con código no administrado. En ese caso, GHC funcionará muy bien para usted. A fines del año pasado, escribí un servidor DDE bajo Windows usando FFI para hablar con las bibliotecas MS DDE y, sorprendentemente, fue una experiencia extremadamente agradable (especialmente dado que soy un tipo Unix). El FFI de Haskell es poderoso (incluso admite, por ejemplo, devoluciones de llamada a funciones de Haskell desde C u otras bibliotecas), y tener la verificación de tipos de Haskell al escribir código de nivel C es como un sueño hecho realidad.

Ese último punto es una de las principales ventajas de Haskell: el sistema de tipos es asombroso. Dicho esto, es como cualquier herramienta poderosa; necesita tiempo y esfuerzo para hacer un buen uso de él.

Entonces, sí, es posible comenzar a escribir pequeños fragmentos de código en Haskell que se vinculan al resto de su código (aunque puede que le resulte más fácil comenzar con pequeños programas de Haskell que se vinculan a su otro código), y vale la pena gastarlo bastante tiempo aprendiendo sobre esto y usándolo siempre que pueda. Puede terminar como yo, planeando un proyecto bastante importante estrechamente integrado con el código de Windows (en mi caso, un complemento sofisticado de Excel) en Haskell.

cjs
fuente