Pregunta

Los lenguajes funcionales son buenos porque evitan errores al eliminar el estado, pero también porque pueden ser fácilmente paralelizados automáticamente para usted, sin que tenga que preocuparse por el número de hilos.

Sin embargo, como desarrollador de Win32, ¿puedo usar Haskell para algunos archivos DLL 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?

¿Las funciones de paralelismo de F # que usted escribe a través de múltiples núcleos y cpu son automáticamente para usted? ¿Alguna vez verías aumentar el número de hilos 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?

¿Fue útil?

Solución

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

http://book.realworldhaskell.org/

Otros consejos

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

No me parece bien publicar un enlace aquí a un podcast en el que participo, parece un poco extraño, pero en el episodio del Código de Herding donde hablamos con Matt Podwysocki, le hicimos la misma pregunta y dio algunas respuestas interesantes. También hay muchos buenos enlaces relacionados con la programación funcional en ese episodio. Encontré los títulos de un enlace " Por qué importa la programación funcional " Eso puede proporcionar algunas respuestas para ti.

Esto también podría 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 (prelanzamiento) es definitivamente interesante, pero hasta ahora creo que me hace querer pegar más y más con C #, usando bibliotecas como Extensiones Paralelas.

No mencionaste, pero supongo, que estás usando C ++. Una forma potencialmente fácil de ponerse en funcionamiento es a través de C ++ / CLI a F #. C ++ contiene "polvo mágico de duendes" (llamado IJW: Simplemente funciona) para permitirle llamar dentro y fuera del código administrado. Con esto, llamar al código F # es casi tan simple como 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), realiza una transición mágica 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 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 automáticamente hace un thunk para usted.

Si decides seguir el camino de Haskell, la función que buscarás es FFI: Foreign Function Interface. Sin embargo, no creo que le brinde el mismo nivel de integración que C ++ / CLI con F #.

Actualmente estoy aprendiendo Haskell, cuando empiezas a aprenderlo, no parece muy interesante porque la experiencia de aprendizaje NO ES NADA como aprender un lenguaje como C #, es un mundo completamente nuevo, pero noté que podía escribir Expresiones muy, muy complejas en tan solo unas pocas líneas de código, cuando volví a mirar el código, era mucho más conciso, pequeño y ajustado. ¡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 de lo que la mayoría de los otros idiomas permiten, te voto para que lo aprendas!

Buena suerte.

Como 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 en Windows usando FFI para hablar con las bibliotecas de MS DDE y, sorprendentemente, fue una experiencia extremadamente agradable (especialmente dado que soy un chico de Unix). La FFI de Haskell es poderosa (incluso es compatible con, por ejemplo, las devoluciones de llamadas a las funciones de Haskell desde C u otras bibliotecas), y la verificación de tipos de Haskell al escribir 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 esto, es como cualquier herramienta poderosa; se 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 con el resto de su código (aunque puede que le resulte más fácil comenzar con pequeños programas de Haskell que se vinculan con su otro código), y es Vale la pena dedicar una buena cantidad de tiempo a aprender sobre esto y usarlo donde sea posible. Puede terminar como yo, planificando un proyecto bastante importante integrado estrechamente con el código de Windows (en mi caso, un complemento sofisticado de Excel) en Haskell.

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