2014-10-02 17 views
260

Chcę uczyć się FRP w Haskell, ale trudno jest zdecydować, jakiej biblioteki użyć. Wielu wydaje się być martwymi próbami, niektórzy wydają się być wskrzeszeni (np. Niedawna aktywność na Yampie).Jak zasadniczo różnią się FRP od pull-pull i arrowed?

Z tego, co przeczytałem, wynika, że ​​istnieją dwa "rodzaje" FRP: push-pull FRP (jak w Reactive-banana) po jednej stronie i arrowized FRP (jak w Yampie) po drugiej stronie. Wygląda na to, że w czasach Fran i FrTime istniało również coś w rodzaju "klasycznego FRP", ale nie zauważyłem w nich żadnej niedawnej aktywności.

  • Czy te dwa (lub trzy) naprawdę fundamentalnie różne podejścia do FRP?

  • Czy jedna z nich jest przestarzałą teorią, a druga to "materiał przyszłości"?

  • Czy muszą one ewoluować równolegle, odnosząc się do różnych celów?

  • Czy wymieniłem najbardziej znaną bibliotekę każdej kategorii lub czy są inne opcje do rozważenia (Sód, Netwire i inni)?


I wreszcie obserwował talk from Evan Czaplicki zalecany w komentarzach J. Abrahamson. Jest to bardzo interesujące i pomogło mi to wyjaśnić. Gorąco polecam każdemu, kto uznał to pytanie za interesujące.

+5

Być może zainteresuje Cię opinia ertes'a (autora netwire): http://stackoverflow.com/a/13344292/414413 – Cirdec

+14

Naprawdę szybko: 'reaktywny-banan' jest zdecydowanie oparty na pull-u, a nie push-pull. "reactive" to push-pull. 'Yampa' i' netwire' są strzałkami. Istnieją FRP, które umożliwiają "gromadzenie wartości", ale nie pozwalają na "przełączanie", FRP, które umożliwiają "przełączanie", ale nie "gromadzenie wartości". Oba są "proste" FRP. Arrowed FRP umożliwia przełączanie i gromadzenie i używa strzałek do kontrolowania niebezpieczeństwa łączenia tych funkcji. Monadyczne FRP, takie jak "reaktywny-banan", "sód" i "elerea", wykorzystują inne ostrożne mechanizmy, aby zapewnić, że przełączanie i akumulacja nie wchodzą w interakcje zbyt wiele. –

+12

Arrowed FRP ma również niezłą cechę, że sygnały są zawsze podawane w kontekście ich danych wejściowych, co pozwala na transformację wyjściowych współzmiennie i wprowadzeń przeciwnie, aby lepiej symulować interaktywne FRP. Zapoznaj się z prawdziwie funkcjonalnymi interfejsami użytkownika opracowanymi przez Courtney i Elliott, aby pokazać doskonały przykład tej funkcji. –

Odpowiedz

15

Wziąłem wycieczkę do Haskell.org zbadać swoje pytanie co znalazłem to dwa ważne dokumenty powinieneś czytać dalej swoje badania, a ja buduję moją odpowiedź na pytanie z tych naukowych referatów.

Push-Pull FRP by Conal Elliott

Generalising Monads to Arrows by John Hughes


  1. Tak, ale też nie. Według Elliota, pchanie jest oparte na danych oceny FRP i pull odnosi się do tak zwanej oceny "popytu". Autor zaleca ciągnięcie, ponieważ nacisk ma tendencję do jałowania pomiędzy wejściami danych. Oto sedno: push-pull łączy i równoważy te zachowania dla głównego celu minimalizując potrzebę ponownego obliczania wartości. To proste; obsługa FRP z push-pull przyspiesza zdolność reagowania. Arrow to inna technika wykorzystywania typów abstrakcyjnych do łączenia wartości i oceniania ich jednocześnie. Wszystkie te pojęcia są zasadniczo różne. Ale nie wierz mi na słowo:

    Charakter interfejsu strzałki jest problematyczny z punktu widzenia minimalnej ponownej oceny. Wprowadzane zdarzenia i zachowania są łączone w jedno wejście, które następnie zmienia się po zmianie dowolnego elementu (Elliott).

    W ten sposób Arrow stoi w sprzeczności z celem push-pull.To nie znaczy, że nie możesz użyć wszystkich tych słów naraz, tylko że będą skomplikowane, a niektóre rzeczy nie można obliczyć bez abstrakcyjnych typów strzałek.

  2. Nie znalazłem naukowych opinii na temat tego, które podejścia są "drogą przyszłości". Pamiętaj tylko, że strzałki radzą sobie szczególnie dobrze. Jeśli mógłbyś zastosować strzałki i użyć funkcji push-pull, aby zminimalizować obliczenia, byłby to sposób na przyszłość.

  3. Tak, dotyczą one odrębnych celów. Jak już powiedziałem, można je formułować razem, ale jest to trudne do zrealizowania, a nawet jeśli zadziała, prawdopodobnie zaneguje reaktywne korzyści prędkości wynikające z push-pull.

  4. To subiektywne, ale Reactive i Yampa wydają się być najczęściej cytowanymi bibliotekami językowymi dla FRP. Powiedziałbym, że Reactive by Conal Elliott ma głębokie korzenie, a także Yampa. Inne projekty, takie jak Netwire, powstały jako zamienniki, ale może minąć trochę czasu, zanim zastąpią gigantów.


Nadzieja to pomaga! Tak jak powiedziałem, przeczytanie artykułów, które wskazałem, da lepsze wyczucie semantycznej odległości między strzałą, pchnięciem i ciągnięciem.

Powiązane problemy