Кажется, я немного смущен при сравнении Clojure core.async с так называемыми реактивными расширениями (Rx) и FRP в общем. Они, похоже, решают подобную проблему асинхронности, поэтому я задаюсь вопросом, каковы главные различия и в каких случаях один предпочтительнее другого. Может кто-нибудь объяснить?
РЕДАКТИРОВАТЬ: Чтобы стимулировать более подробные ответы, я хочу уточнить вопрос:
-
Core.async позволяет писать синхронный код. Однако, как я понимаю, FRP требует только один уровень вложенных обратных вызовов (вся функция, обрабатывающая логику, передается как аргументы API FRP). Похоже, что оба подхода делают ненужные пирамиды обратного вызова. Это правда, что в JS мне приходится писать
function() {...}
много раз, но основная проблема, вложенные обратные вызовы, также удалена в FRP. Правильно ли я понимаю? -
" FRP собирает сообщения сообщений с потоком управления" Можете ли вы (кто-то) дать более конкретное объяснение?
-
Не могу ли я передавать наблюдаемые конечные точки FRP так же, как я пропускаю каналы?
В общем, я понимаю, откуда берутся оба подхода, и я попробовал несколько учебников в обоих из них. Однако я, кажется, "парализован" неочевидностью различий. Есть ли какой-нибудь пример кода, который трудно записать в одном из них и легко использовать другой? И какова архитектурная причина этого?