2008-09-27 25 views
101

Los lenguajes funcionales son buenos porque evitan errores al eliminar el estado, pero también porque se pueden paralelizar automáticamente para usted, sin tener que preocuparse por el número de subprocesos.¿Cómo puedo usar programación funcional en el mundo real?

Como desarrollador de Win32, ¿puedo usar Haskell para algunos archivos de mi aplicación? Y si lo hago, ¿hay una ventaja real que se tomaría 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? ¿Alguna vez verías aumentar el número de subprocesos en el administrador de tareas?

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

+2

Personalmente, me gustaría investigar sobre erlang, pero ese soy yo. –

+1

Para aclarar un poco, ya tengo experiencia con algunos lenguajes de programación funcionales 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? –

+1

posible duplicado de [¿Por qué los idiomas funcionales?] (Http://stackoverflow.com/questions/36504/why-functional-languages) –

Respuesta

41

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

http://book.realworldhaskell.org/

+0

Estoy esperando que se imprima. Parece que será uno de los mejores libros que hay. Apuesto a que servirá a las personas interesadas en Haskell mejor de lo que Ocaml lo hace por Ocaml – Friedrich

6

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

Buena suerte.

23

F # no contiene ningún polvo de duende mágico que pase las funciones a diferentes CPU o máquinas. Lo que hace F #/Haskell y otros lenguajes de programación funcionales es facilitarle la escritura de funciones que pueden procesarse independientemente del hilo o CPU en el que se crearon.

No me parece correcto publicar un enlace aquí en un podcast en el que participo, parece un poco apagado, 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 buenos enlaces relacionados con la programación funcional en ese episodio. Encontré uno de los títulos de los enlaces "Why Functional Programming Matters" Eso puede proporcionar algunas respuestas para usted.

+21

Luego publicaré para usted: http: // herdingcode. com /? p = 45 :) –

+0

http://stackoverflow.com/questions/682710/does-f-provide-you-automatic-parallelism –

13

Esto también podría ser interesante: " Real World Functional Programming"

ejemplos están en F # y C#, pero la teoría es bastante genérico. Por lo que he leído (prelanzamiento) es definitivamente interesante, pero hasta ahora creo que me está haciendo querer pegarme cada vez más con C#, usando bibliotecas como Parallel Extensions.

+0

¿Aún sientes que "quieres seguir pegando cada vez más con C#"? F # ofrece algunas características interesantes. El mayor impulso que he recibido es menos tipeo (lo que significa menos fricción en el proceso de expresar soluciones en el código). – Daniel

+1

@Daniel en cierto modo, incluso más; p Sin embargo, las herramientas con las que trabajo pueden ser atípicas. –

7

No mencionaste, pero asumo 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 permitirte llamar dentro y fuera 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 modificador/clr), transita mágicamente al código administrado, y desde allí, puedo cargar mis complementos F # y ejecutarlos. Para facilitar aún más la implementación, F # puede vincular estáticamente todas sus dependencias, por lo que no necesita desplegar los archivos de tiempo de ejecución 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 automáticamente hace un thunk para usted.

Si decide ir por el camino de Haskell, la función que estará buscando es FFI: Foreign Function Interface. Sin embargo, no creo que le proporcione el mismo nivel de integración que C++/CLI con F #.

4

Como mencionas Win32 y DLL, supongo que estás 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 en Windows usando FFI para hablar con las bibliotecas MS DDE, y, sorprendentemente, fue una experiencia extremadamente agradable (especialmente dado que soy un tipo Unix). La FFI de Haskell es poderosa (incluso soporta, por ejemplo, las devoluciones de llamadas a las funciones de Haskell desde C u otras bibliotecas), y tener el tipo de verificación de Haskell cuando se escribe un código de nivel C es como un sueño hecho realidad.

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

Así que sí, es posible comenzar a escribir pequeños trozos de código en Haskell que enlazan con el resto de su código (aunque puede que le resulte más fácil comenzar con pequeños programas Haskell que enlazan con su otro código), y Vale la pena pasar mucho tiempo aprendiendo sobre esto y usándolo donde sea que pueda. Puede terminar como yo, planificando un proyecto bastante importante estrechamente integrado con el código de Windows (en mi caso, un sofisticado complemento de Excel) en Haskell.