web-dev-qa-db-fra.com

Comment fondamentalement différentes sont FRP push-pull et arrowized?

Je veux étudier le PRF à Haskell, mais il est un peu difficile de choisir une bibliothèque à utiliser. Beaucoup semblent être des tentatives infructueuses, certaines semblent avoir été ressuscitées (comme l'activité récente sur Yampa).

D'après ce que j'ai lu, il semblerait qu'il existe deux "types" de PRF: le PRF push-pull (comme dans Banana réactif) d'un côté et le PRF sous forme de flèche (comme dans Yampa) de l'autre côté. Il semble qu’il existait aussi des "PRF classiques" à l’époque de Fran et FrTime, mais je n’ai pas décelé d’activité récente dans ces domaines.

  • Ces deux (ou trois) approches sont-elles fondamentalement différentes du PRF?

  • L’une d’elles est-elle une théorie dépassée alors que l’autre serait la "matière du futur"?

  • Ou doivent-ils évoluer en parallèle pour répondre à des objectifs différents?

  • Ai-je nommé la bibliothèque la plus importante de chaque catégorie ou y a-t-il d'autres options à envisager (Sodium, Netwire, etc.)?


J'ai finalement regardé le entretien d'Evan Czaplicki recommandé dans les commentaires de J. Abrahamson. C'est très intéressant et m'a aidé à clarifier les choses. Je le recommande fortement à tous ceux qui ont trouvé cette question intéressante.

262
Guillaume Ponce

J'ai effectué un voyage sur Haskell.org pour examiner votre question. Ce que j'ai trouvé sont deux articles importants que vous devriez lire pour approfondir vos recherches, et je construis ma réponse à votre question à partir de ces articles savants.

FRP Push-Pull de Conal Elliott

Généraliser des monades aux flèches par John Hughes


  1. Oui mais aussi non. Selon Elliot, Push est une évaluation de FRP basée sur les données et tire se rapporte à ce que l’on appelle l’évaluation fondée sur la demande. L'auteur recommande de tirer car Push a tendance à rester inactif entre les entrées de données. Voici l'essentiel: Push-pull combine et équilibre ces comportements dans le but principal de minimiser le besoin de recalculer les valeurs. = C'est simple; L'utilisation de FRP avec Push-pull accélère la capacité de réaction. La flèche est une technique différente permettant d’utiliser des types abstraits pour lier des valeurs et les évaluer simultanément. Tous ces concepts sont fondamentalement différents. Mais ne prenez pas ma parole pour cela:

    La nature de l'interface Arrow est problématique pour l'objectif de réévaluation minimale. Les événements d'entrée et les comportements sont combinés en une seule entrée, qui change ensuite chaque fois qu'un composant change, (Elliott).

    Ainsi, Arrow contredit l'objectif de Push-pull. Cela ne signifie pas que vous ne pouvez pas utiliser tous ces éléments en même temps, mais simplement que ce serait complexe et qu'il y a des choses que vous ne pouvez pas calculer sans les types de flèche abstraits.

  2. Je n'ai pas trouvé d'opinions savantes sur lesquelles les approches sont "la voie de l'avenir". Notez seulement que les flèches peuvent gérer la simultanéité particulièrement bien. Si vous pouviez implémenter des flèches et utiliser Push-pull pour minimiser les calculs, ce serait la voie de l'avenir.

  3. Oui, ils répondent à des objectifs distincts. Comme je l'ai dit, ils peuvent être formulés ensemble mais leur mise en œuvre est difficile et même si cela fonctionne, cela annulerait probablement les avantages de la réactivité push-pull en termes de réactivité.

  4. C'est subjectif, mais Reactive et Yampa semblent être les bibliothèques de langues les plus souvent citées pour FRP. Je dirais que Reactive de Conal Elliott a des racines profondes et que Yampa est également bien établi. D'autres projets tels que Netwire ont été créés à titre de remplaçants, mais il pourrait s'écouler un certain temps avant qu'ils ne remplacent les géants.


J'espère que cela t'aides! Comme je l'ai dit, la lecture des articles que j'ai mentionnés vous donnera une meilleure idée de la distance sémantique entre les flèches, push et pull.

16
Kevin Caravaggio