Гаразд, з фонових знань та з читання сторінки Вікіпедії, на яку ви вказали, виявляється, що реактивне програмування - це щось на зразок обчислень потоку даних, але зі специфічними зовнішніми "стимулами", що викликають набір вузлів для запуску та проведення їх обчислень.
Це дуже добре підходить для дизайну інтерфейсу, наприклад, коли для торкання керування користувальницьким інтерфейсом (скажімо, регулювання гучності програми для відтворення музики) може знадобитися оновлення різних елементів відображення та фактичного обсягу аудіовиходу. Коли ви змінюєте гучність (слайдер, скажімо), це відповідало б зміні значення, пов'язаного з вузлом у спрямованому графіку.
Різні вузли, що мають краї цього вузла "значення гучності", автоматично запускаються, і всі необхідні обчислення та оновлення, природно, пульсують через додаток. Додаток "реагує" на стимул користувача. Функціональне реактивне програмування - це просто реалізація цієї ідеї на функціональній мові, або взагалі в рамках парадигми функціонального програмування.
Щоб отримати докладнішу інформацію про "обчислення даних", знайдіть ці два слова у Вікіпедії або скористайтеся улюбленою пошуковою системою. Загальна ідея така: програма - це спрямований графік вузлів, кожен з яких виконує прості обчислення. Ці вузли з'єднані між собою графськими посиланнями, які забезпечують виходи одних вузлів на входи інших.
Коли вузол спрацьовує або виконує його обчислення, вузли, підключені до його виходів, мають відповідні входи "спрацьовані" або "позначені". Будь-який вузол, у якого всі входи спрацьовані / позначені / доступні, автоматично спрацьовує. Графік може бути неявним або явним залежно від того, як саме реалізується реактивне програмування.
Вузли можна розглядати як стрілянину паралельно, але часто вони виконуються послідовно або з обмеженим паралелізмом (наприклад, їх виконання може бути декількома потоками). Відомий приклад - Манчестерська машина передачі даних , яка (IIRC) використовувала марковану архітектуру даних для планування виконання вузлів у графіку через один або декілька одиниць виконання. Обчислення потоків даних досить добре підходить для ситуацій, коли запускання обчислень асинхронно спричиняє каскади обчислень, працює краще, ніж намагання виконання керувати годинником (або тактовими частотами).
Реактивне програмування імпортує цю ідею "каскаду виконання" і, здається, мислить програму подібним чином, але за умови, що деякі вузли підключені до "зовнішнього світу" і каскади виконання спрацьовують, коли ці сенсорні -подібні вузли змінюються. Потім виконання програми виглядатиме як щось аналогічне складній рефлекторній дузі. Програма може або не бути в основному силою між подразниками, або може перетворитися в стан, що знаходиться в основному, між подразниками.
"нереактивне" програмування було б програмуванням з дуже різним поглядом на потік виконання та відношення до зовнішніх входів. Це може бути дещо суб'єктивно, оскільки люди, ймовірно, будуть спокушатися сказати все, що реагує на зовнішні входи, "реагує" на них. Але, дивлячись на дух речі, програма, яка опитує чергу подій з фіксованим інтервалом і розсилає будь-які події, виявлені для функцій (або потоків), є менш реактивною (тому що вона відвідує лише введення користувачем через фіксований інтервал). Знову ж таки, тут суть справи: можна уявити, як реалізація опитування з швидким інтервалом опитування в систему на дуже низькому рівні та програмувати реактивним способом поверх неї.