2009-02-08 7 views
10

Me estoy cansando de tener que codificar explícitamente para multinúcleo si quiero más velocidad, particularmente cuando estoy escribiendo un guión único. Mi cuadro dev ya tiene 8 núcleos y ese número sube mucho más rápido que la velocidad del reloj. Los lenguajes funcionales parecen ofrecer una vía de escape potencial, pero aún no me he esforzado por dominar uno de ellos.¿Cuáles son algunos ejemplos impresionantes de código funcional?

me gustaría ver algunos trozos de muestra de código del mundo real que son mucho mejor y/o más paralelizable que las alternativas no funcionales. No soy exigente con el idioma, estoy más interesado en los conceptos.

Gracias!

+0

lo que usted está funcionando como una caja dev que tiene 8 núcleos? –

+0

Supongo que es dual quad cores –

+0

Sí, es un servidor Dell dual quad core. – twk

Respuesta

4

Este video (largo, pero muy bueno) proporciona tanto una introducción a F# y una demostración convincente de lo fácil que es para paralelizar código en el lenguaje:

http://channel9.msdn.com/pdc2008/TL11/

+0

Ese fue un gran video, gracias. – twk

6

¿Qué tal MapReduce? Es increíblemente paralelizable y, aunque no está implementado en lenguajes funcionales en lo que respecta al papel, está inspirado en Lisp's map y reduce.

+0

y Hadoop, alternativa de código abierto de MapReduce. –

2

Su pregunta está pidiendo derecho material en el estado del arte. Creo que su mejor introducción a este campo, con ejemplos, es el libro Implicit Parallel Programming in pH de Nikhil y Arvind.

1

Hay un ejemplo extendido de un indexador/buscador de texto usando mapreduce en el Capítulo 20 ("Programación de CPU multi-core") de Programming Erlang. No sé cuán impresionante es eso, pero parece que los mortales pueden escribir.

1

LINQ es un buen ejemplo de programación funcional en lenguajes principales. Código reificado y mónadas En MI C#? :) De todos modos, w.r.t. Enhebrado, hay mención de Parallel LINQ. Al usar inmutabilidad y funciones de orden superior (y Expresión, tal vez), las bibliotecas pueden paralelizar cosas para nosotros.

Y otro enlace a F # con async workflows. Lo que es impresionante es la capacidad de tomar el código de sincronización, y con algunas pequeñas anotaciones convertirlo en código asíncrono. El código conserva muchas de las cualidades imperativas que podrías estar usando. No tiene que cambiar completamente las cosas para aprovechar esto; el compilador lo maneja todo.

0

Un profesor mío solía decir en broma que el mayor ejemplo de código funcional es el código que no está escrito.

Cuestiones relacionadas