haskell frp reactive-banana yampa

haskell - ¿Qué tan diferentes son los FRP de empujar y tirar y con flecha?



reactive-banana yampa (1)

Hice un viaje a Haskell.org para investigar su pregunta. Encontré dos documentos importantes que debería leer para continuar con su investigación, y estoy elaborando mi respuesta a su pregunta a partir de estos documentos académicos.

Push-Pull FRP por Conal Elliott

Generalizando mónadas a flechas por John Hughes

  1. Sí, pero también no. Según Elliot, push es una evaluación de FRP basada en datos y pull se relaciona con lo que se denomina evaluación impulsada por "demanda". El autor recomienda tirar porque el empuje tiende a estar inactivo entre las entradas de datos. Aquí está el quid: push-pull combina y equilibra estos comportamientos con el propósito principal de minimizar la necesidad de volver a calcular los valores. Es sencillo; Operar FRP con push-pull acelera la capacidad de reaccionar. Arrow es una técnica diferente para usar tipos abstractos para vincular valores y evaluarlos simultáneamente. Todos estos conceptos son fundamentalmente diferentes. Pero no confíes en mi palabra:

    La naturaleza de la interfaz de Arrow es problemática para el objetivo de una reevaluación mínima. Los eventos y comportamientos de entrada se combinan en una sola entrada, que luego cambia cada vez que cambia algún componente, (Elliott).

    Así, Arrow contradice el objetivo de push-pull. Eso no significa que no puedas usar todos estos a la vez, solo que sería complejo, y hay algunas cosas que no puedes calcular sin los tipos abstractos de Flecha.

  2. No he encontrado opiniones académicas sobre qué enfoques son "el camino del futuro". Solo tenga en cuenta que las flechas pueden manejar la simultaneidad particularmente bien. Si pudieras implementar flechas y usar push-pull para minimizar los cálculos, ese sería el camino del futuro.

  3. Sí, se dirigen a fines separados. Como dije, pueden formularse juntos, pero es difícil de implementar e incluso si funciona, probablemente anularía los beneficios de la velocidad reactiva del push-pull.

  4. Eso es subjetivo, pero Reactive y Yampa parecen ser las bibliotecas de idiomas más citadas para FRP. Yo diría que Reactivo por Conal Elliott tiene raíces profundas, y Yampa también está establecida. Otros proyectos como Netwire surgieron como reemplazos, pero podría pasar un tiempo antes de reemplazar a los gigantes.

¡Espero que esto ayude! Como dije al leer los artículos que señalé, te darán una mejor idea de la distancia semántica entre flecha, empujar y tirar.

Quiero estudiar FRP en Haskell, pero es un poco difícil decidir qué biblioteca usar. Muchos parecen ser intentos muertos, algunos parecen haber resucitado (como la actividad reciente en Yampa).

Por lo que leí, parece que hay dos "tipos" de FRP: FRP push-pull (como en Banana reactiva) en un lado y FRP con flecha (como en Yampa) en el otro lado. Parece que también solía haber algún "FRP clásico" en el momento de Fran y FrTime, pero no he detectado ninguna actividad reciente en estos.

  • ¿Son estos dos (o tres) enfoques realmente diferentes de FRP?

  • ¿Una de ellas es una teoría obsoleta, mientras que la otra sería la "materia del futuro"?

  • ¿O tienen que evolucionar en paralelo, abordando diferentes propósitos?

  • ¿Nombro la biblioteca más prominente de cada categoría o hay otras opciones a considerar (Sodium, Netwire, et al)?

Finalmente vi la charla de Evan Czaplicki recomendada en los comentarios de J. Abrahamson. Es muy interesante y me ayudó a aclararme las cosas. Lo recomiendo a cualquiera que haya encontrado interesante esta pregunta.