Haskell에서 FRP를 공부하고 싶지만 사용할 라이브러리를 결정하기가 약간 어렵습니다. 많은 사람들이 죽은 시도 인 것처럼 보이고 일부는 부활 된 것 같습니다 (예 : Yampa에서의 최근 활동).
내가 읽은 바에 따르면 FRP에는 한쪽에 푸시 풀 FRP (반응성 바나나와 같은)와 다른쪽에 화살표가있는 FRP (Yampa와 같은)의 두 가지 종류가 있습니다. Fran과 FrTime 당시에는 “클래식 FRP”도 있었지만 최근 활동을 발견하지 못했습니다.
-
이 두 가지 (또는 세 가지)가 근본적으로 다른 FRP 접근 방식입니까?
-
그들 중 하나는 구식 이론이고 다른 하나는 “미래의 것들”일까요?
-
아니면 다른 목적을 다루면서 동시에 진화해야합니까?
-
각 범주에서 가장 눈에 띄는 라이브러리의 이름을 지정 했습니까? 아니면 고려해야 할 다른 옵션이 있습니까 (Sodium, Netwire 등)?
나는 마침내 J. Abrahamson의 논평에서 추천 한 Evan Czaplicki 의 연설을 보았다 . 그것은 매우 흥미롭고 나를 위해 일을 명확히하는 데 도움이되었습니다. 나는이 질문이 흥미로운 것을 발견 한 사람에게 강력히 추천한다.
답변
나는 당신의 질문을 조사하기 위해 Haskell.org를 방문했다. 내가 찾은 것은 당신의 연구를 계속하기 위해 읽어야 할 두 가지 중요한 논문이고, 나는이 학술 논문에서 당신의 질문에 대한 나의 답을 만들고 있습니다.
-
예, 아니요 Elliot에 따르면 푸시 는 데이터 기반 FRP 평가이며 풀 은 “수요”중심 평가와 관련이 있습니다. 필자는 데이터 입력간에 푸시가 유휴 상태가되기 때문에 pull을 권장합니다. 핵심 사항은 다음과 같습니다. 푸시 풀 은 값을 다시 계산해야 할 필요성을 최소화하기 위해 이러한 동작을 결합하고 균형을 맞 춥니 다 . 간단 해; 푸시 풀로 FRP를 작동하면 반응 능력이 향상됩니다. 화살표 는 추상 유형을 사용하여 값을 연결하고 동시에 평가하는 다른 기술입니다. 이 모든 개념은 근본적으로 다릅니다. 그러나 내 말을 받아들이지 마십시오.
Arrow 인터페이스의 특성은 최소한의 재평가 목표에 문제가 있습니다. 입력 이벤트와 동작은 단일 입력으로 결합 된 다음 구성 요소가 변경 될 때마다 변경됩니다 (Elliott).
따라서 Arrow는 푸시 풀의 목표와 모순됩니다. 그렇다고해서이 모든 것을 한 번에 사용할 수있는 것은 아니며 복잡 할 뿐이며 추상 화살표 유형 없이는 계산할 수없는 것이 있습니다.
-
어떤 접근 방식이 “미래의 길”인지에 대한 학문적 견해를 찾지 못했습니다. 화살표는 특히 동시성을 잘 처리 할 수 있습니다. 화살표를 구현하고 푸시 풀을 사용하여 계산을 최소화 할 수 있다면 미래의 방식 일 것입니다.
-
예, 그들은 별도의 목적을 다룹니다. 내가 말했듯이, 그것들은 함께 공식화 될 수 있지만 구현하기가 어렵고 작동하더라도 푸시 풀의 반응성 속도 이점을 무효화 할 수 있습니다.
-
주관적이지만 Reactive와 Yampa는 FRP에서 가장 일반적으로 인용되는 언어 라이브러리 인 것으로 보입니다. Conal Elliott의 Reactive는 뿌리가 깊으며 Yampa도 설립되었습니다. Netwire와 같은 다른 프로젝트는 대체물로 등장했지만 거인을 대체하기 전에는 시간이 걸릴 수 있습니다.
도움이 되었기를 바랍니다! 내가 말한 것처럼 내가 지적한 기사를 읽으면 화살표, 밀기 및 당기기 사이의 의미 론적 거리를 더 잘 이해할 수 있습니다.