Різниця між реактивним та функціонально-реактивним програмуванням


76

Нещодавно я проводив деякі дослідження реактивного програмування, і мені важко знайти хороший опис різниці між реактивним та функціонально- реактивним.

Чи просто реактивне програмування реалізоване за допомогою функціональних методів / парадигм на відміну від використання декларативної або ОО-парадигм?

Відповіді:


74

Функціональне реактивне програмування (FRP) - це специфічна модель програмування з певною семантикою. (Насправді є два варіанти, які іноді називають "класичний FRP" і "стрілка FRP".) Я дав короткий зміст у відповіді на "Що таке (функціональне) реактивне програмування?" . Як я вже говорив там, двома ключовими властивостями для мене завжди були (а) точне і просте позначення та (б) безперервний час. Я шкодую, що цю модель почали називати "функціональним реактивним програмуванням" з кількох причин:

  • Ця назва опускає "час", і час для мене є центральним.
  • Термін "функціональний" має так мало конкретного / чіткого значення. Я набагато віддаю перевагу запропонованій Петром Ландіном заміни "денотатив". (Дивіться цитати та посилання в цьому коментарі до блогу .)
  • Людям легко помилково думати, що вони знають, що означає цей термін, оскільки знають значення (більш-менш) кожного з трьох слів.

Для описовості та точності я віддаю перевагу терміну "денотативне безперервне програмування" (запропонований Джейком Макартуром у розмові деякий час тому) перед "функціональним реактивним програмуванням".

Я написав дуже коротку статтю про походження FRP у дописі в блозі Ранні натхнення та нові напрямки у функціональному реактивному програмуванні .


24

FRP - це поєднання функціонального програмування (парадигма програмування, побудована на ідеї всього, що є чистою функцією), та парадигма реактивного програмування (побудована на ідеї, що все є потоком (спостерігач та спостережувана філософія)). Це, мабуть, найкращий зі світів.

Визначення обох дає більш чітке розмежування між ними.


чудовий огляд :)
Брахем Мохамед
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.