¿Cuán fundamentalmente diferentes son el FRP push-pull y arrowized?

265

Quiero estudiar FRP en Haskell, pero es un poco difícil decidir qué biblioteca utilizar. 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 Reactive-banana) en un lado y FRP en 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 visto ninguna actividad reciente en estos.

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

  • ¿Es una de ellas una teoría desactualizada mientras que la otra sería el "material del futuro"?

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

  • ¿Mencioné la biblioteca más destacada 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 aclarar las cosas. Se lo recomiendo a cualquiera que encuentre esta pregunta interesante.

Guillaume Ponce
fuente
55
Tal vez le interese la opinión de ertes (el autor del netwire): stackoverflow.com/a/13344292/414413
Cirdec
14
Muy rápido: reactive-bananadefinitivamente está basado en pull no pull-pull. reactivees push-pull. Yampay netwireestán en flecha. Hay FRP que permiten "acumular valores" pero no permiten "conmutar", FRP que permiten "conmutar" pero no "acumular valores". Ambos son FRP "simples". Arrowized FRP permite cambiar y acumular y usa flechas para controlar el peligro de combinar esas características. Monadic FRP gusta reactive-banana, sodiumy elereausa otros mecanismos cuidadosos para asegurar que el cambio y la acumulación no interactúen demasiado.
J. Abrahamson
12
Arrowized FRP también tiene la característica clara de que las señales siempre se establecen en el contexto de sus entradas, lo que le permite transformar las salidas de forma covariante y las entradas de forma contraria para simular mejor FRP interactivo. Vea Interfaces de usuario genuinamente funcionales de Courtney y Elliott para un gran ejemplo de esa característica.
J. Abrahamson
9
También te puede interesar la charla "Control de tiempo y espacio" del autor de Elm Evan Czaplicki. En mi opinión, se las arregla para dar una buena visión general de alto nivel sobre el espacio de diseño de FRP y los compromisos involucrados.
DanielM
3
Creo que obtendrá su respuesta aquí ... stackoverflow.com/questions/10000074/…
Rushabh Shah

Respuestas:

18

Hice un viaje a Haskell.org para investigar su pregunta. Lo que encontré son dos documentos importantes que debe leer para ampliar su investigación, y estoy construyendo mi respuesta a su pregunta a partir de estos documentos académicos.

Push-Pull FRP de Conal Elliott

Generalizando las mónadas a las flechas por John Hughes


  1. Sí, pero también no. Según Elliot, el empuje es una evaluación de FRP basada en datos y el tirón se relaciona con lo que se llama evaluación dirigida por "demanda". El autor recomienda pull porque push tiende a estar inactivo entre las entradas de datos. Aquí está el quid: el push-pull combina y equilibra estos comportamientos con el objetivo principal de minimizar la necesidad de recalcular los valores. Es sencillo; operar FRP con push-pull acelera la capacidad de reacción. 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 cualquier componente (Elliott).

    Por lo tanto, Arrow contradice el objetivo de push-pull. Eso no significa que no pueda usar todo esto a la vez, solo que sería complejo, y hay algunas cosas que no puede 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 pudiera implementar flechas y usar push-pull para minimizar los cálculos, ese sería el camino hacia el futuro.

  3. Sí, abordan propósitos separados. Como dije, se pueden formular juntos, pero es difícil de implementar e incluso si funciona, probablemente negaría los beneficios de la velocidad de reacción del empuje-arrastre.

  4. Eso es subjetivo, pero Reactive y Yampa parecen ser las bibliotecas de idiomas más comúnmente citadas para FRP. Diría que Reactive by 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 que reemplacen a los gigantes.


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

Kevin Caravaggio
fuente