Je veux étudier FRP à Haskell, mais c'est un peu difficile de décider d'une bibliothèque à utiliser. Beaucoup semblent être des tentatives mortes, certains semblent avoir été ressuscités (comme la récente activité sur Yampa).
D'après ce que j'ai lu, il semble qu'il existe deux "types" de FRP: le FRP push-pull (comme dans Reactive-banana) d'un côté et le FRP fléché (comme dans Yampa) de l'autre côté. Il semble qu'il y ait également eu des "FRP classiques" à l'époque de Fran et FrTime, mais je n'ai pas repéré d'activité récente dans ces derniers.
Ces deux (ou trois) approches du PRF sont-elles vraiment fondamentalement différentes?
L'une d'elles est-elle une théorie dépassée alors que l'autre serait le "truc du futur"?
Ou doivent-ils évoluer en parallèle, à des fins différentes?
Ai-je nommé la bibliothèque la plus importante de chaque catégorie, ou y a-t-il d'autres options à considérer (Sodium, Netwire, et al)?
J'ai finalement regardé le discours d'Evan Czaplicki recommandé dans les commentaires de J. Abrahamson. C'est très intéressant et cela m'a aidé à clarifier les choses. Je le recommande vivement à tous ceux qui ont trouvé cette question intéressante.
la source
reactive-banana
est définitivement basé sur le pull et non sur le push-pull.reactive
est push-pull.Yampa
etnetwire
sont fléchés. Il y a des FRP qui permettent des "valeurs cumulées" mais ne permettent pas de "commuter", des FRP qui permettent des "commutations" mais pas des "valeurs cumulées". Les deux sont des FRP "simples". Le FRP fléché permet de commuter et d'accumuler et utilise des flèches pour contrôler le danger de combiner ces fonctionnalités. Monadique FRP commereactive-banana
,sodium
etelerea
utiliser d' autres mécanismes rigoureux afin de commutation et l' accumulation ne pas interagi trop.Réponses:
J'ai fait un voyage sur Haskell.org pour enquêter sur votre question. J'ai trouvé deux articles importants que vous devriez lire pour approfondir vos recherches, et je construis ma réponse à votre question à partir de ces articles savants.
Push-Pull FRP par Conal Elliott
Généraliser des monades en flèches par John Hughes
Oui, mais aussi non. Selon Elliot, la poussée est une évaluation du PRF basée sur les données et la traction se rapporte à ce que l'on appelle une évaluation axée sur la «demande». L'auteur recommande pull car push a tendance à rester inactif entre les entrées de données. Voici l'essentiel: le push-pull combine et équilibre ces comportements dans le but principal de minimiser la nécessité 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 pour utiliser des types abstraits pour lier des valeurs et les évaluer simultanément. Tous ces concepts sont fondamentalement différents. Mais ne me croyez pas sur parole:
Ainsi, Arrow contredit l'objectif du push-pull. Cela ne signifie pas que vous ne pouvez pas utiliser tout cela à la fois, mais que ce serait complexe, et il y a certaines choses que vous ne pouvez pas calculer sans types de flèche abstraits.
Je n'ai pas trouvé d'opinions savantes sur les approches qui sont «la voie de l'avenir». Notez seulement que les flèches peuvent particulièrement bien gérer la simultanéité. Si vous pouviez implémenter des flèches et utiliser le push-pull pour minimiser les calculs, ce serait la voie de l'avenir.
Oui, ils répondent à des objectifs distincts. Comme je l'ai dit, ils peuvent être formulés ensemble, mais il est difficile à mettre en œuvre et même si cela fonctionne, cela annulerait probablement les avantages de vitesse réactive du push-pull.
C'est subjectif, mais Reactive et Yampa semblent être les bibliothèques de langues les plus couramment citées pour FRP. Je dirais que Reactive de Conal Elliott a des racines profondes et Yampa est également établi. D'autres projets comme Netwire sont apparus en remplacement, mais cela pourrait prendre un certain temps avant de remplacer les géants.
J'espère que cela t'aides! Comme je l'ai dit, la lecture des articles que j'ai signalés vous donnera une meilleure idée de la distance sémantique entre la flèche, la poussée et la traction.
la source