Моя недавняя статья о том, как React не является реактивной, и почему вам не волнует, открыла гораздо большую дискуссию об определении реактивного программирования в целом. И задним числом мне даже не нравится определение, которое я сам представлял.
Я снова попал в ловушку определения его реализацией. Я прочитал несколько разных определений в своем поиске, но все они не были правы. Википедия , Сток переполнен , Реактивный манифест , так далее…
Тот, кто говорил со мной больше всего, был Андре Стальц от Введение в реактивное программирование, которое вам не хватало , но это все еще было настолько сфокусировано на реагировании:
Реактивное программирование – это программирование с асинхронными потоками данных.
Асинхронный? Не обязательно. Потоки? Не всегда. Так что я обобщал это до:
Реактивное программирование-это декларативная парадигма программирования, основанная на излучах событий, ориентированных на данные.
Не хорошо. Кого заботится о излучах событий? Это все еще слишком механическое.
Итак, давайте сделаем этот еще один выстрел.
Так что, если мы не собираемся сосредоточиться на механизме, событиях, что делает программирование реактивным? Я нашел свой ответ немного дальше вниз по этой записи в Википедии. Как насчет возможности описать такую систему:
a = b + c
И есть ли это отношение представляет правило, а не назначение. Чтобы обеспечить A Всегда равна сумме b а также C были b или C когда -либо меняться. И эти отношения никогда не меняются.
Это ядро каждой реактивной системы, независимо от того, применяем ли мы операторы для преобразования потоков или какого-то сигнала автоматического отслеживания. Мы имеем дело с декларативным выражением отношений между ценностями, которые меняются со временем.
Так что это реагирующее программирование?
Декларативное выражение взаимосвязи между значениями, которые меняются со временем.
Это не новая концепция. Датируется до 1969 года, когда Рене Пардо и Реми Ландау составляют «Ланпара» (язык для программирования в случайном случае), более или менее чертеж для современной электронной таблицы. И является аналогичным проблемным пространством для языков описания аппаратного обеспечения (HDL), которые разрабатывались примерно в одно и то же время.
И неудивительно, что это желание отслеживает ранние исследования в области вычислений. В конце концов, как лучше всего сэкономить, но с помощью автоматизации. Устанавливая правила, касающиеся того, как элементы данных ведут себя по отношению друг к другу, мы можем абстрагировать сложность исполнения.
Просто в концепции, но не без собственной сложности в реализации. Начиная с того факта, что программное обеспечение не является декларативным. Включает это фиксированная связь между переменными или наблюдается «без сбоев» синхронизации. Так что я уверен, что мы будем обсуждать, как лучше всего достичь этого на долгие годы.
Неудивительно, что, возможно, даже сейчас, когда я чувствую себя более довольным своим определением, это не дает никаких дальнейших различий. В некотором смысле, реактивное программирование – это просто еще одно название для декларативного программирования. Это везде.
Конечно, есть конкретные ароматы с их собственными моделями, и мы можем дифференцировать их. Но точно так же RXJS не строго FRP Или я должен сказать DCTP, эти различия служат только для дифференциации реализаций/моделей, но не парадигмы.
Речь идет не о push vs prough, сигналах (поведение) против потоков, асинхронизированной синхронизации. Когда системы полностью на основе тяги все еще подпадают под этот зонт, ясно, что семантика обновления не является определяющим критерием для включения. Цитировать 1989 Paper который впервые использовал термин реактивный программирование:
Программы в реальном времени обычно реагируют.
Что такое современный браузер, лишь форма программ в реальном времени?
РЕДАКТИРОВАТЬ: Как и большинство вещей, очевидно, кто -то уже написал эту статью в 2010 году. https://paulstovell.com/reactive-programming/ Анкет Спасибо Павелю Козловски за то, что поделились. Хотелось бы, чтобы я нашел такие статьи, как эти много лет назад. Сэкономил бы много времени.
Оригинал: “https://dev.to/this-is-learning/what-the-hell-is-reactive-programming-anyway-31p5”