2012-04-03 10 views
26

Estoy empezando a mirar el mundo de la Programación Reactiva Funcional en Haskell, y me gustaría experimentar con la programación de la GUI (con gtk, debido a la unión sustancial) en un entorno de reacción.¿Qué paquete de FRP elegir?

Ahora, he estado buscando un poco en Grapefruit, Reactive-Banana y Buster, y me gustaría cualquier testimonio del placer/horror de usar uno u otro paquete.

Todo lo que tengo es estas opiniones preliminares:

  • no me importa hacer algunas de la unión del paquete de FRP GTK mí, ya que tengo una sensación ambivalet acerca de la idea abstracta de fondo (que la toronja tiene) ..

  • Mientras que encuentro interesante teoría de tipos, también valoran codificaciones simples para los programas actuales, que parece poner grapfruit-guarda un poco fuera ..

Esto es, a menos que algunos de ustedes me persuadan para pensar lo contrario :-)

+4

"graprefuit" y "reactive-banana"? ¿Hay alguna afinidad especial entre frp y fruta? –

+1

@benw: Creo que la parte "banana" es una referencia a un documento con uno de los títulos más divertidos que conozco: [Programación funcional con plátanos, lentes, sobres y alambre de púas] (http://research.microsoft.com/en-us/um/people/emeijer/Papers/fpca91.pdf). – hammar

+1

@hammar: Jaja, ¡bien! En realidad, elegí el nombre "plátano" por diferentes razones, pero me gusta mencionarlo. –

Respuesta

18

Si solo quiere usar FRP normal, y mantenerse cerca del marco de la GUI en lugar de usar una abstracción "prefabricada" sobre él , el plátano reactivo es la opción más viable, en mi opinión. Está explícitamente orientado alrededor de la vinculación a los marcos existentes, está diseñado para el uso del "mundo real" (no hacer nada demasiado experimental, semánticamente, que podría causar problemas), y así sucesivamente.

Puede consultar reactive-banana-wx para ver cómo vincular un marco basado en eventos a reactivo-banana. Es muy sencillo; Escribí un enlace rápido a Gtk2Hs una vez (por desgracia, perdí el código ahora) y el archivo no superó las 50 líneas. Fue casi una transliteración directa del código reactivo-banana-wx.

recomendaría contra el uso de Buster, por la sencilla razón de que hasn't been updated since 2009, y no se basa en GHC 7.

Otros marcos de FRP "orientados a la producción" son sodium (similar a la que reaccionan con el plátano, pero tiene dynamic event switching (que es coming to reactive-banana soon, pero aún no lo está) y un concepto de "particiones" para concurrencia; sin embargo, acaba de aparecer y no ha sido adoptado aún) y netwire (FRP arrowised, una criatura completamente diferente a plátano reactivo y sodio).

+2

actualización: la conmutación está en plátano reactivo a partir de la versión 0.7.0.0 – AndrewC

+1

(Sin embargo, Heinrich Apfelmus todavía está (2013.06.20) [trabajando en] (http://stackoverflow.com/questions/15396038/dynamic-event-switching- in-reactive-banana-causes-severe-leak # comment24927049_15396038) la recolección de basura de cambio de evento dinámico, por lo que debe usarse con precaución en este momento). – AndrewC

12

He estado experimentando con FRP y hasta ahora, el único que me ha funcionado es Reactive-Banana. Nunca miré a Grapefruit ni a la mayoría de los otros porque estaban desactualizados y no parecía que pudieran actualizarse o admitirse en absoluto. Miré brevemente Netwire, pero francamente toda la teoría de la flecha en él me desanimó y tuve muchos problemas para averiguar cómo hacer incluso cosas simples.

En cambio, he logrado obtener un buen conjunto de enlaces a SDL escritos en Reactive-Banana con solo unos pocos contratiempos en el camino. Otra cosa a favor de Reactive-Banana es que Heinreich es muy activo en la comunidad y, a menudo, brindará respuestas útiles cuando tenga problemas. Solo revise las diversas preguntas de plátano reactivo aquí y verá que ha respondido a algunas de ellas y, por lo general, es muy activo en las discusiones de FRP en las listas de correo de Haskell.

+1

¡Las respuestas a veces son exactamente lo que necesita! ¡Gracias! –

Cuestiones relacionadas