Реактивное программирование

Поделись знанием:
Перейти к: навигация, поиск
Парадигмы программирования
 • Императивная
(контрастирует с декларативной)
Процедурная
Структурная
Аспектно-ориентированная
Объектно-ориентированная
Агентно-ориентированная
Компонентно-ориентированная
Прототипно-ориентированная
Обобщённое программирование

 • Декларативная
(контрастирует с императивной)

Чистота языка
Чистота функции
Функциональная
В терминах Рефал-машины
Аппликативная
Комбинаторная
Бесточечная
(чистая конкатенативная)
Логическая
Ограничениями

 • Конкатенативная
 • Векторная[en]
 • Метапрограммирование

Языково-ориентированная
Предметно-ориентированная
Пользователями[en]
Автоматизация процесса программирования
Рефлексивность
Гомоиконность[en]

 • Связанные темы

Программирование в крупном и мелком масштабе[en]
Модульность
Полиморфизм
Продолжения и CPS
Параллелизм и конкурентность

 • Методы и алгоритмы

Автоматное
Динамическое
Потоков данных
Событийно-ориентированное
Реактивное
Сервис-ориентированное

Реактивное программирование — парадигма программирования, ориентированная на потоки данных и распространение изменений. Это означает, что должна существовать возможность легко выражать статические и динамические потоки данных, а также то, что нижележащая модель исполнения должна автоматически распространять изменения благодаря потоку данных.

К примеру, в императивном программировании присваивание a := b + c будет означать, что переменной a будет присвоен результат выполнения операции b + c, используя текущие (на момент вычисления) значения переменных. Позже значения переменных b и c могут быть изменены без какого-либо влияния на значение переменной a.

В реактивном же программировании значение a будет автоматически пересчитано, основываясь на новых значениях.

Современные табличные процессоры представляют собой пример реактивного программирования. Ячейки таблицы могут содержать строковые значения или формулу вида «=B1+C1», значение которой будет вычислено исходя из значений соответствующих ячеек. Когда значение одной из зависимых ячеек будет изменено, значение этой ячейки будет автоматически обновлено.

Другой пример — это языки описания аппаратуры (HDL), такие как Verilog. Реактивное программирование позволяет моделировать изменения в виде их распространения внутри модели.

Реактивное программирование предлагалось как путь для лёгкого создания пользовательских интерфейсов, анимации или моделирования систем, изменяющихся во времени.

К примеру, в MVC архитектуре с помощью реактивного программирования можно реализовать автоматическое отражение изменений из Model в View и наоборот из View в Model.





Концепции

Реактивные подходы к программированию

Императивное реактивное программирование

Можно соединить парадигмы реактивного и императивного программирования. В такой связке императивные программы могли бы работать над реактивными структурами данных.

Объектно-ориентированное реактивное программирование

Объектно-ориентированное реактивное программирование (ООРП) — это комбинация объектно-ориентированного подхода с реактивным. Вероятно, наиболее естественный способ сделать это состоит в том, что вместо методов и полей, у объектов есть реакции, которые автоматически пересчитывают значения и другие реакции зависят от изменений этих значений.

Функциональное реактивное программирование

См. Functional reactive programming (англ.)

Функциональное программирование является наиболее естественным базисом для реализации реактивной архитектуры, хорошо сочетаясь с параллелизмом.

Функциональное реактивное программирование (ФРП) сформировалось в 1997 году, с предложением языка Fran[1]. Позже были разработаны такие языки как Fruit, FRP и RT-FRP, FAL, Frob, Fvision, Yampa[2].

Простейшее функциональное реактивное выражение имеет следующую форму[3]:

b1 `until` e => b2

что буквально означает «вести себя как b1 до возникновения события e, после этого вести себя как b2».

Реализации

  • React, созданная в Facebook JavaScript-библиотека разработки пользовательских интерфейсов.
  • Elm, функциональный реактивный язык программирования, компилирующийся в HTML, CSS и JavaScript
  • Flapjax, событийно-реактивный язык для программирования веб-приложений
  • [github.com/JuliaLang/Reactive.jl Reactive.jl], FRP реализация для Julia

Напишите отзыв о статье "Реактивное программирование"

Ссылки

  1. [conal.net/papers/icfp97/ Functional Reactive Animation]
  2. Mun Hon Cheong [www.cse.unsw.edu.au/~pls/thesis/munc-thesis.pdf Functional Programming and 3D Games]. — The University of New South Wales, 2005.
  3. Paul Hudak [haskell.cs.yale.edu/?post_type=publication&p=125 Modular Domain Specific Languages and Tools]. — IEEE Computer Society Press, Department of Computer Science, Yale University, 1998.


Отрывок, характеризующий Реактивное программирование

– Он пишет про войну про эту, – сказал князь с той сделавшейся ему привычной, презрительной улыбкой, с которой он говорил всегда про настоящую войну.
– Должно быть, очень интересно, – сказал Десаль. – Князь в состоянии знать…
– Ах, очень интересно! – сказала m llе Bourienne.
– Подите принесите мне, – обратился старый князь к m llе Bourienne. – Вы знаете, на маленьком столе под пресс папье.
M lle Bourienne радостно вскочила.
– Ах нет, – нахмурившись, крикнул он. – Поди ты, Михаил Иваныч.
Михаил Иваныч встал и пошел в кабинет. Но только что он вышел, старый князь, беспокойно оглядывавшийся, бросил салфетку и пошел сам.
– Ничего то не умеют, все перепутают.
Пока он ходил, княжна Марья, Десаль, m lle Bourienne и даже Николушка молча переглядывались. Старый князь вернулся поспешным шагом, сопутствуемый Михаилом Иванычем, с письмом и планом, которые он, не давая никому читать во время обеда, положил подле себя.
Перейдя в гостиную, он передал письмо княжне Марье и, разложив пред собой план новой постройки, на который он устремил глаза, приказал ей читать вслух. Прочтя письмо, княжна Марья вопросительно взглянула на отца.
Он смотрел на план, очевидно, погруженный в свои мысли.
– Что вы об этом думаете, князь? – позволил себе Десаль обратиться с вопросом.
– Я! я!.. – как бы неприятно пробуждаясь, сказал князь, не спуская глаз с плана постройки.
– Весьма может быть, что театр войны так приблизится к нам…
– Ха ха ха! Театр войны! – сказал князь. – Я говорил и говорю, что театр войны есть Польша, и дальше Немана никогда не проникнет неприятель.
Десаль с удивлением посмотрел на князя, говорившего о Немане, когда неприятель был уже у Днепра; но княжна Марья, забывшая географическое положение Немана, думала, что то, что ее отец говорит, правда.
– При ростепели снегов потонут в болотах Польши. Они только могут не видеть, – проговорил князь, видимо, думая о кампании 1807 го года, бывшей, как казалось, так недавно. – Бенигсен должен был раньше вступить в Пруссию, дело приняло бы другой оборот…
– Но, князь, – робко сказал Десаль, – в письме говорится о Витебске…
– А, в письме, да… – недовольно проговорил князь, – да… да… – Лицо его приняло вдруг мрачное выражение. Он помолчал. – Да, он пишет, французы разбиты, при какой это реке?
Десаль опустил глаза.
– Князь ничего про это не пишет, – тихо сказал он.
– А разве не пишет? Ну, я сам не выдумал же. – Все долго молчали.
– Да… да… Ну, Михайла Иваныч, – вдруг сказал он, приподняв голову и указывая на план постройки, – расскажи, как ты это хочешь переделать…
Михаил Иваныч подошел к плану, и князь, поговорив с ним о плане новой постройки, сердито взглянув на княжну Марью и Десаля, ушел к себе.
Княжна Марья видела смущенный и удивленный взгляд Десаля, устремленный на ее отца, заметила его молчание и была поражена тем, что отец забыл письмо сына на столе в гостиной; но она боялась не только говорить и расспрашивать Десаля о причине его смущения и молчания, но боялась и думать об этом.
Ввечеру Михаил Иваныч, присланный от князя, пришел к княжне Марье за письмом князя Андрея, которое забыто было в гостиной. Княжна Марья подала письмо. Хотя ей это и неприятно было, она позволила себе спросить у Михаила Иваныча, что делает ее отец.
– Всё хлопочут, – с почтительно насмешливой улыбкой, которая заставила побледнеть княжну Марью, сказал Михаил Иваныч. – Очень беспокоятся насчет нового корпуса. Читали немножко, а теперь, – понизив голос, сказал Михаил Иваныч, – у бюра, должно, завещанием занялись. (В последнее время одно из любимых занятий князя было занятие над бумагами, которые должны были остаться после его смерти и которые он называл завещанием.)
– А Алпатыча посылают в Смоленск? – спросила княжна Марья.
– Как же с, уж он давно ждет.


Когда Михаил Иваныч вернулся с письмом в кабинет, князь в очках, с абажуром на глазах и на свече, сидел у открытого бюро, с бумагами в далеко отставленной руке, и в несколько торжественной позе читал свои бумаги (ремарки, как он называл), которые должны были быть доставлены государю после его смерти.