푸시 풀 및 화살표 FRP는 근본적으로 어떻게 다른가요?


264

Haskell에서 FRP를 공부하고 싶지만 사용할 라이브러리를 결정하기가 약간 어렵습니다. 많은 사람들이 죽은 시도 인 것처럼 보이고 일부는 부활 된 것 같습니다 (예 : Yampa에서의 최근 활동).

내가 읽은 바에 따르면 FRP에는 한쪽에 푸시 풀 FRP (반응성 바나나와 같은)와 다른쪽에 화살표가있는 FRP (Yampa와 같은)의 두 가지 종류가 있습니다. Fran과 FrTime 당시에는 "클래식 FRP"도 있었지만 최근 활동을 발견하지 못했습니다.

  • 이 두 가지 (또는 세 가지)가 근본적으로 다른 FRP 접근 방식입니까?

  • 그들 중 하나는 구식 이론이고 다른 하나는 "미래의 것들"일까요?

  • 아니면 다른 목적을 다루면서 동시에 진화해야합니까?

  • 각 범주에서 가장 눈에 띄는 라이브러리의 이름을 지정 했습니까? 아니면 고려해야 할 다른 옵션이 있습니까 (Sodium, Netwire 등)?


나는 마침내 J. Abrahamson의 논평에서 추천 한 Evan Czaplicki연설을 보았다 . 그것은 매우 흥미롭고 나를 위해 일을 명확히하는 데 도움이되었습니다. 나는이 질문이 흥미로운 것을 발견 한 사람에게 강력히 추천한다.


5
당신은 ertes '(netwire 저자의 의견)에 관심이있을 수 있습니다 : stackoverflow.com/a/13344292/414413
Cirdec

14
정말 빠르게 : reactive-banana풀-풀이 아닌 풀 기반입니다. reactive푸시 풀입니다. Yampanetwirearrowized된다. "누적 값"을 허용하지만 "전환"을 허용하지 않는 FRP가 있습니다. "스위칭"은 허용하지만 "누적 값"은 허용하지 않는 FRP가 있습니다. 둘 다 "간단한"FRP입니다. Arrowized FRP는 전환 및 누적을 허용하고 화살표를 사용하여 이러한 기능의 결합 위험을 제어합니다. Monadic FRP는 reactive-banana,을 좋아 sodium하고 elerea다른주의 메커니즘을 사용하여 전환 및 누적이 너무 많이 상호 작용하지 않도록합니다.
J. Abrahamson

12
Arrowized FRP는 또한 대화식 FRP를 더 잘 시뮬레이션하기 위해 출력을 공변량으로 변환하고 입력을 반 변형 적으로 변환 할 수있는 입력과 관련하여 항상 신호가 표시되는 깔끔한 기능을 가지고 있습니다. 이 기능의 좋은 예는 Courtney 및 Elliott의 정품 기능 사용자 인터페이스를 참조하십시오.
J. Abrahamson

9
Elm의 저자 Evan Czaplicki의 "시간과 공간 제어" 대화에 관심이있을 수도 있습니다 . 내 생각에 그는 FRP 디자인 공간과 관련 타협에 대해 좋은 수준의 개요를 제공합니다.
DanielM

3
나는 당신이 여기에 당신의 대답을 얻을 것이라고 생각합니다 .. stackoverflow.com/questions/10000074/…
Rushabh Shah

답변:


17

나는 당신의 질문을 조사하기 위해 Haskell.org를 방문했다. 내가 찾은 것은 당신의 연구를 계속하기 위해 읽어야 할 두 가지 중요한 논문이고, 나는이 학술 논문에서 당신의 질문에 대한 나의 답을 만들고 있습니다.

Conal Elliott의 푸시 풀 FRP

John Hughes의 모나드를 화살표로 일반화


  1. 예, 아니요 Elliot에 따르면 푸시 는 데이터 기반 FRP 평가이며 은 "수요"중심 평가와 관련이 있습니다. 필자는 데이터 입력간에 푸시가 유휴 상태가되기 때문에 pull을 권장합니다. 핵심 사항은 다음과 같습니다. 푸시 풀값을 다시 계산해야 할 필요성을 최소화하기 위해 이러한 동작을 결합하고 균형을 맞 춥니 다 . 간단 해; 푸시 풀로 FRP를 작동하면 반응 능력이 향상됩니다. 화살표 는 추상 유형을 사용하여 값을 연결하고 동시에 평가하는 다른 기술입니다. 이 모든 개념은 근본적으로 다릅니다. 그러나 내 말을 받아들이지 마십시오.

    Arrow 인터페이스의 특성은 최소한의 재평가 목표에 문제가 있습니다. 입력 이벤트와 동작은 단일 입력으로 결합 된 다음 구성 요소가 변경 될 때마다 변경됩니다 (Elliott).

    따라서 Arrow는 푸시 풀의 목표와 모순됩니다. 그렇다고해서이 모든 것을 한 번에 사용할 수있는 것은 아니며 복잡 할 뿐이며 추상 화살표 유형 없이는 계산할 수없는 것이 있습니다.

  2. 어떤 접근 방식이 "미래의 길"인지에 대한 학문적 견해를 찾지 못했습니다. 화살표는 특히 동시성을 잘 처리 할 수 ​​있습니다. 화살표를 구현하고 푸시 풀을 사용하여 계산을 최소화 할 수 있다면 미래의 방식 일 것입니다.

  3. 예, 그들은 별도의 목적을 다룹니다. 내가 말했듯이, 그것들은 함께 공식화 될 수 있지만 구현하기가 어렵고 작동하더라도 푸시 풀의 반응성 속도 이점을 무효화 할 수 있습니다.

  4. 주관적이지만 Reactive와 Yampa는 FRP에서 가장 일반적으로 인용되는 언어 라이브러리 인 것으로 보입니다. Conal Elliott의 Reactive는 뿌리가 깊으며 Yampa도 설립되었습니다. Netwire와 같은 다른 프로젝트는 대체물로 등장했지만 거인을 대체하기 전에는 시간이 걸릴 수 있습니다.


도움이 되었기를 바랍니다! 내가 말한 것처럼 내가 지적한 기사를 읽으면 화살표, 밀기 및 당기기 사이의 의미 론적 거리를 더 잘 이해할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.