Наскільки принципово різними є штовхаючі та стрілові FRP?


264

Я хочу вивчити FRP в Haskell, але визначити, яку бібліотеку використовувати, трохи важко. Багато хто, здається, мертві спроби, деякі, здається, воскресилися (наприклад, недавня діяльність на Ямпа).

З того, що я прочитав, складається враження, що є два "види" FRP: "push-pull FRP" (як у "Реактивний банан") з одного боку та стрілеподібний FRP (як у Yampa) з іншого боку. Здається, що за Фран і FrTime раніше існував якийсь "класичний FRP", але я не помітив жодної недавньої активності в них.

  • Чи справді ці два (або три) принципово різні підходи FRP?

  • Чи є одна з них застарілою теорією, тоді як іншою буде "речі майбутнього"?

  • Або вони повинні розвиватися паралельно, вирішуючи різні цілі?

  • Я назвав найвидатнішу бібліотеку кожної категорії, чи є інші варіанти, які слід врахувати (Sodium, Netwire та ін.)?


Нарешті я подивився розмови Евана Чаплічки, рекомендовані у коментарях Дж. Абрахамсона. Це дуже цікаво і допомогло з’ясувати речі для мене. Я дуже рекомендую його всім, хто вважає це питання цікавим.


5
Ви можете бути зацікавлені в ertes 'думка (в netwire автора): stackoverflow.com/a/13344292/414413
Cirdec

14
Дійсно швидко: reactive-bananaбезумовно, на основі тяги не push-pull. reactiveє push-pull. Yampaі netwireмають стрілку. Є FRP, які дозволяють "накопичувати значення", але не дозволяють "перемикатися", FRP, які дозволяють "перемикати", але не "накопичувати значення". Обидва ці "прості" FRP. Стрілене FRP дозволяє перемикати та накопичувати, а за допомогою стрілок контролювати небезпеку поєднання цих функцій. Monadic FRP, як reactive-banana, sodiumі elereaвикористовувати інші дбайливі механізми, щоб переключення та накопичення не взаємодіяло надто сильно.
Дж. Абрахамсон

12
Стрілене FRP також має чітку особливість, що сигнали завжди подаються в контексті їх входів, що дозволяє перетворювати виходи коваріантно та входи противажно, щоб краще імітувати інтерактивний FRP. Дивіться справді функціональні користувальницькі інтерфейси Кортні та Елліотта для прекрасного прикладу цієї функції.
Дж. Абрахамсон

9
Можливо, вам також буде цікава розмова "Контроль часу та простору" автора Elm Евана Чаплічки. На мій погляд, йому вдається надати хороший огляд високого рівня щодо дизайнерського простору FRP та компромісів, пов'язаних із цим.
DanielM

3
Я думаю , що ви отримаєте відповідь на своє питання тут .. stackoverflow.com/questions/10000074 / ...
Rushabh Шах

Відповіді:


17

Я поїхав на Haskell.org, щоб вивчити ваше питання. Я знайшов два важливі статті, які ви повинні прочитати для подальшого дослідження, і я будую свою відповідь на ваше запитання з цих наукових робіт.

FP-Pul-Pull FRP від ​​Conal Elliott

Узагальнення монадів до стрілок Джона Х'юза


  1. Так, але також ні. За словами Елліота, поштовх визначається оцінкою FRP, керованою даними, а тягання стосується того, що називається оцінкою, орієнтованої на попит. Автор рекомендує тягнути, тому що натискання прагне простоювати між введеннями даних. Ось суть: push-pull поєднує та врівноважує ці поведінки з основною метою мінімізації потреби в перерахунку значень. Це просто; експлуатація FRP з натисканням на потяг прискорює здатність реагувати. Стрілка - це інша техніка використання абстрактних типів для зв’язування значень та їх одночасної оцінки. Усі ці поняття принципово різні. Але не приймайте мого слова за це:

    Характер інтерфейсу Стрілки є проблематичним для досягнення мінімальної переоцінки. Події та поведінка введення об'єднуються в один вхід, який потім змінюється щоразу, коли змінюється будь-який компонент (Елліотт).

    Таким чином, Стрілка суперечить меті push-pull. Це не означає, що ви не можете використовувати все це одразу, тільки що це було б складно, і є деякі речі, які ви не можете обчислити без абстрактних типів стрілок.

  2. Я не знайшов наукових думок щодо того, які підходи - це "шлях майбутнього". Зауважте лише, що стрілки можуть особливо добре справлятися з одночасністю. Якщо ви можете реалізувати стрілки і використовувати push-pull, щоб мінімізувати обчислення, це був би шлях до майбутнього.

  3. Так, вони стосуються окремих цілей. Як я вже говорив, їх можна сформулювати разом, але це важко здійснити, і навіть якщо це дійсно спрацює, це, мабуть, заперечує переваги реактивної швидкості при натисканні.

  4. Це суб'єктивно, але Реактив і Ямпа, як видається, є найбільш часто цитованими мовними бібліотеками для FRP. Я б сказав, що Reactive by Conal Elliott має глибокі корені, і Yampa також створена. Інші проекти, такі як Netwire, виникли як заміна, але це може пройти деякий час, перш ніж вони замінять гігантів.


Сподіваюсь, це допомагає! Як я вже казав, читання статей, які я зазначив, дасть вам краще відчуття смислової відстані між стрілкою, натисканням та потягуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.