Quão fundamentalmente diferentes são o push-pull e o FRP com seta?


265

Quero estudar FRP em Haskell, mas é um pouco difícil decidir sobre uma biblioteca a ser usada. Muitos parecem tentativas mortas, alguns parecem ter ressuscitado (como atividades recentes em Yampa).

Pelo que li, parece que existem dois "tipos" de FRP: FRP push-pull (como em banana reativa) de um lado e FRP com seta (como em Yampa) do outro lado. Parece que também costumava haver "FRP clássico" na época de Fran e FrTime, mas não vi nenhuma atividade recente nelas.

  • Essas duas (ou três) abordagens são realmente fundamentalmente diferentes da FRP?

  • Um deles é uma teoria ultrapassada, enquanto o outro seria o "material do futuro"?

  • Ou eles precisam evoluir em paralelo, abordando diferentes propósitos?

  • Eu nomeei a biblioteca mais importante de cada categoria ou existem outras opções a considerar (Sodium, Netwire, et al)?


Finalmente assisti à palestra de Evan Czaplicki recomendada nos comentários de J. Abrahamson. É muito interessante e ajudou a esclarecer as coisas para mim. Eu recomendo para quem achou esta pergunta interessante.


5
Você pode estar interessado na opinião de ertes (o autor da rede): stackoverflow.com/a/13344292/414413
Cirdec 2/14

14
Muito rapidamente: reactive-bananaé definitivamente baseado em pull e não push-pull. reactiveé push-pull. Yampae netwireestão em seta. Existem FRPs que permitem "acumular valores" mas não permitem "alternar", FRPs que permitem "alternar" mas não "acumular valores". Ambos são FRP "simples". O FRP com seta permite alternar e acumular e usa setas para controlar o perigo de combinar esses recursos. O FRP monádico reactive-banana, como,, sodiume elereausa outros mecanismos cuidadosos para garantir que a troca e a acumulação não interajam demais.
J. Abrahamson

12
O FRP em seta também possui o recurso puro de que os sinais sempre são declarados no contexto de suas entradas, o que permite transformar as saídas de forma covariável e as entradas de maneira contravariante, a fim de simular melhor o FRP interativo. Consulte Interfaces de usuário genuinamente funcionais de Courtney e Elliott para obter um ótimo exemplo desse recurso.
J. Abrahamson

9
Talvez você também esteja interessado na palestra "Controlando o tempo e o espaço" do autor de Elm, Evan Czaplicki. Na minha opinião, ele consegue fornecer uma boa visão geral de alto nível sobre o espaço de design do FRP e os compromissos envolvidos.
DanielM

3
Eu acho que você vai ter sua resposta aqui .. stackoverflow.com/questions/10000074/…
Rushabh Shah

Respostas:


18

Fiz uma viagem ao Haskell.org para investigar sua pergunta. O que encontrei foram dois artigos importantes que você deveria ler para aprofundar sua pesquisa e estou construindo minha resposta à sua pergunta a partir desses artigos acadêmicos.

Push-Pull FRP por Conal Elliott

Generalizando Mônadas em Setas por John Hughes


  1. Sim, mas também não. De acordo com Elliot, o push é a avaliação de FRP orientada por dados e o pull está relacionado ao que é chamado de avaliação orientada por "demanda". O autor recomenda pull, porque o push tende a ficar ocioso entre as entradas de dados. Aqui está o ponto crucial: o push-pull combina e equilibra esses comportamentos com o objetivo principal de minimizar a necessidade de recalcular valores. É simples; operar FRP com push-pull acelera a capacidade de reagir. Arrow é uma técnica diferente para usar tipos abstratos para vincular valores e avaliá-los simultaneamente. Todos esses conceitos são fundamentalmente diferentes. Mas não aceite minha palavra:

    A natureza da interface do Arrow é problemática para o objetivo de uma reavaliação mínima. Os eventos e comportamentos de entrada são combinados em uma única entrada, que muda sempre que qualquer componente é alterado (Elliott).

    Assim, Arrow contradiz o objetivo do push-pull. Isso não significa que você não pode usar tudo isso de uma só vez, apenas que seria complexo, e há algumas coisas que você não pode calcular sem os tipos abstratos de Arrow.

  2. Não encontrei opiniões acadêmicas sobre quais abordagens são "o caminho do futuro". Observe apenas que as setas podem lidar particularmente bem com a simultaneidade. Se você pudesse implementar setas e usar push-pull para minimizar os cálculos, esse seria o caminho do futuro.

  3. Sim, eles abordam propósitos separados. Como eu disse, eles podem ser formulados juntos, mas é difícil de implementar e, mesmo que funcione, provavelmente negaria os benefícios de velocidade reativa do push-pull.

  4. Isso é subjetivo, mas Reactive e Yampa parecem ser as bibliotecas de idiomas mais citadas para o FRP. Eu diria que a Reactive de Conal Elliott tem raízes profundas e a Yampa também está estabelecida. Outros projetos como o Netwire surgiram como substitutos, mas pode demorar um pouco até que eles substituam os gigantes.


Espero que isto ajude! Como eu disse, ao ler os artigos que apontei, você terá uma melhor noção da distância semântica entre flecha, empurrar e puxar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.