ventajas programacion orientada objetos logica funcional ejemplos desventajas haskell f# functional-programming

haskell - logica - programacion funcional vs orientada a objetos



¿Cómo puedo usar la programación funcional en el mundo real? (6)

Actualmente estoy aprendiendo a Haskell, cuando comienzas a aprenderlo, no parece muy intrigante porque la experiencia de aprendizaje NADA es como aprender un idioma como C #, es un mundo completamente nuevo, pero noté que podía escribir muy muy complejo expresiones 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.

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.

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 # paralela las funciones que escribe en múltiples núcleos y CPU de forma automática para usted? ¿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?


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 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.

Ese último punto es una de las principales ventajas de Haskell: el sistema de tipos es sorprendente. 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 tu código (aunque puede que te resulte más fácil comenzar con pequeños programas Haskell que enlazan con tu otro código), y vale la pena gastarlo. una buena cantidad de 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.


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 está haciendo querer seguir pegando cada vez más con C #, usando bibliotecas como Parallel Extensions.


F # no contiene ningún polvo mágico que pasará 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 siento bien publicando un enlace aquí en un podcast en el que participo, parece un poco desalentador, 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é un enlace titulado " Por qué es importante la programación funcional ", que puede proporcionarle algunas respuestas.


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 #.

Lo he usado 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 decides ir por Haskell, la característica que estarás buscando es FFI: Foreign Function Interface. Sin embargo, no creo que le proporcione el mismo nivel de integración que C ++ / CLI con F #.