Ресурсы по реактивному программированию

Объяснение что такое реактивное программирование. Кому и почему оно нужно


Годное выступление непростого человека: http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014/Keynote-Duality

Библиотеки и фреймверки:


https://www.meteor.com/tracker
1 Симпатия

Чем реактивное программирование отличается от нереактивного и зачем нам нужна эта ракетная наука? Какая связь между реактивным и функциональным программированием? Что такое RxJS и чем он отличается от других “реактивных” фреймворков, ну например React.js и Ractive.js ?

Об этом написано во второй статье. Реактивный код проще писать и поддерживать: ты описываешь только формулу трансформации одних данных, в зависимости от других. Актуальное состояние двух значений поддерживает сама система. Унификация работы с асинхронным кодом:

The Reactive Extensions for JavaScript unifies both the world of Promises, callbacks as well as evented data such as DOM Input, Web Workers, Web Sockets. Once we have unified these concepts, this enables rich composition.

Яркий пример реактивности - excel табличка с формулами. При изменении одной ячейки все связанные обновляют значения. Писать тоже самое на событиях (как сейчас в подавляющем большинстве случаев делают) было бы очень энергозатратно и запутанно.

Я не могу просто ответить на этот вопрос. Предполагаю, что наличие связи функционального программирования (еще зависит от того что ты подразумеваешь под функциональным) не даст лучшего понимания реактивности. Не обязательно писать программу в функциональном стиле, чтобы она была реактивной.

React.js лишний в этом списке. Он не имеет ничего общего с реактивностью (разве, что только react можно использовать в комбинации с реактивным фреймверком типа tracker-а).

RxJS - набор классов и вспомагательных функций не только реактивных значений, но и вспомагательных функций для преобразования, например, событий мыши в реактивный источник (observable). Он не имеет ничего общего с интерфейсами.

Ractive.js похоже делает то, что делает meteorjs (я бы сказал подмножество того, что делает метеор, так как метеор пошел дальше, и синхронизирует не просто данные, а выборки из базы): поддерживает синхронизированные данные с отображением (one-way binding, то есть при изменении данных меняется отображение).

tracker работает не похоже на RxJS (нет понятия Observable, map, reduce). Тем не менее добивается реактивности через установку связей между функциям, которые зависят от 1 или нескольких реактивных (в терминах трекера) значений. Его код, кстати, можно весь прочитать: библиотечка веси 1кб.

2 Симпатий