~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ F9D5A0FA9AFF9AB4C0AB5EC35DA468F6__1715830620 ✰
Заголовок документа оригинал.:
✰ Functional reactive programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Функциональное реактивное программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Functional_reactive_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/f9/f6/f9d5a0fa9aff9ab4c0ab5ec35da468f6.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/f9/f6/f9d5a0fa9aff9ab4c0ab5ec35da468f6__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:01:36 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 16 May 2024, at 06:37 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Функциональное реактивное программирование — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии

Функциональное реактивное программирование ( FRP ) — это парадигма программирования для реактивного программирования ( асинхронного программирования потоков данных ) с использованием строительных блоков функционального программирования (например, карты , сокращения , фильтра ). FRP использовался для программирования графических пользовательских интерфейсов (GUI), робототехники , игр и музыки с целью упростить эти проблемы за счет явного моделирования времени. [ нужна цитата ]

Составы FRP [ править ]

Оригинальную формулировку функционального реактивного программирования можно найти в статье ICFP 97 «Функциональная реактивная анимация» Конала Эллиотта и Пола Худака . [1]

FRP принял множество форм с момента его появления в 1997 году. Одной из осей разнообразия является дискретная и непрерывная семантика. Другая ось — это то, как можно динамически изменять системы FRP. [2]

Непрерывный [ править ]

Самая ранняя формулировка FRP использовала непрерывную семантику, стремясь абстрагироваться от многих рабочих деталей, которые не важны для смысла программы. [3] Ключевые свойства этого препарата:

  • Значения моделирования, которые изменяются в течение непрерывного времени, называются «поведениями», а позже «сигналами».
  • Моделирование « событий », происходящих в дискретные моменты времени.
  • Система может быть изменена в ответ на события, обычно называемые «переключением».
  • Отделение деталей оценки, таких как частота дискретизации, от реактивной модели.

Эта семантическая модель FRP в языках без побочных эффектов обычно представляет собой непрерывные функции и, как правило, во времени. [4] Эту формулировку также называют денотативным программированием в непрерывном времени (DCTP). [5]

Дискретный [ править ]

Такие формулы, как Event-Driven FRP и версии Elm до 0.17, требуют, чтобы обновления были дискретными и управляемыми событиями. [6] Эти формулировки подтолкнули к практическому FRP, сосредоточив внимание на семантике с простым API, который можно эффективно реализовать в таких условиях, как робототехника или в веб-браузере. [7]

В этих формулировках обычно идеи поведения и событий объединяются в сигналы, которые всегда имеют текущее значение, но изменяются дискретно. [8]

Интерактивный FRP [ править ]

Было отмечено, что обычная модель FRP, от ввода до вывода, плохо подходит для интерактивных программ. [9] Отсутствие возможности «запускать» программы в рамках сопоставления входов и выходов может означать, что необходимо использовать одно из следующих решений:

  • Создайте структуру данных действий, которые появляются в качестве выходных данных. Действия должны запускаться внешним интерпретатором или средой. Это унаследовало все трудности исходной системы потокового ввода/вывода (I/O) Haskell . [10]
  • Используйте Arrowized FRP и встраивайте стрелки, способные выполнять действия. Действия также могут иметь идентификаторы, что позволяет им, например, поддерживать отдельные изменяемые хранилища. Это подход, используемый библиотекой Fudgets. [11] и, в более общем смысле, монадические потоковые функции. [12]
  • Новый подход заключается в том, чтобы позволить действиям выполняться сейчас (в монаде IO), но отложить получение их результатов на более позднее время. [13] Это использует взаимодействие между монадами Event и IO и совместимо с более ориентированным на выражение FRP:
 planNow   ::   Событие   (  IO   a  )   ->   IO   (  Событие   a  ) 

Проблемы реализации [ править ]

Существует два типа систем FRP: выталкивающие и вытягивающие. Системы, основанные на push-уведомлениях, принимают события и пропускают их через сигнальную сеть для достижения результата. Системы на основе извлечения ждут, пока не потребуется результат, и работают в обратном направлении по сети, чтобы получить требуемое значение.

Некоторые системы FRP, такие как Yampa, используют выборку, при которой образцы извлекаются из сигнальной сети. У этого подхода есть недостаток: сеть должна ждать в течение одного шага вычислений, чтобы узнать об изменениях входных данных. Выборка является примером FRP на основе вытягивания.

Библиотеки Reactive и Etage на Hackage представили подход, называемый push-pull FRP. В нем это событие создается только тогда, когда требуется следующее событие в чисто определенном потоке (например, список фиксированных событий с указанием времени). Эти чисто определенные потоки действуют в Haskell как ленивые списки . Это половина, основанная на вытягивании. Половина на основе push используется, когда вводятся события, внешние по отношению к системе. Внешние события передаются потребителям, чтобы они могли узнать о событии в момент его возникновения.

Реализации [ править ]

Реализации существуют для многих языков программирования , в том числе:

ReactiveX , популяризированный благодаря реализации rxjs на JavaScript , является функциональным и реактивным, но отличается от функционального реактивного программирования. [18]

См. также [ править ]

Ссылки [ править ]

  1. ^ Эллиотт, Конал; Худак, Павел. «Функциональная реактивная анимация» . Функциональная реактивная анимация . МКФП '97 . Проверено 14 июля 2018 г.
  2. ^ Нильссон, Хенрик; Кортни, Энтони; Петерсон, Джон (февраль 2011 г.) [2002], «Функциональное реактивное программирование, продолжение», Haskell Workshop (PDF)
  3. ^ Эллиотт, Конал; Худак, Пол (1997), «Функциональная реактивная анимация» , ICFP
  4. ^ Кортни, Энтони; Эллиотт, Конал (февраль 2011 г.) [2001], «Подлинно функциональные пользовательские интерфейсы» , Haskell Workshop , Йельский университет.
  5. ^ Эллиот, Конал (2014), «Денотационное проектирование» (PDF) , LambdaJam , получено 5 мая 2023 г.
  6. ^ Таха, Валид; Ван, Чжанюн; Худак, Пол (2002), «FRP, управляемый событиями», PADL (PDF) , Йельский университет, заархивировано из оригинала (PDF) 28 сентября 2013 г. , получено 23 сентября 2013 г.
  7. ^ Чаплицки, Эван; Чонг, Стивен (2013), «Асинхронное функционально-реактивное программирование для графических интерфейсов» , PLDI , Гарвард
  8. ^ Ван, Чжанюн; Таха, Валид; Худак, Пол (февраль 2011 г.), «FRP в реальном времени», ICFP (PDF) , заархивировано из оригинала (PDF) 28 сентября 2013 г. , получено 23 сентября 2013 г.
  9. ^ Эллиотт, Конал (9 декабря 2008 г.). «Почему классический FRP не подходит для интерактивного поведения» . Архивировано из оригинала 12 октября 2022 г.
  10. ^ Борнинг, Алан. «Ввод-вывод на чисто функциональных языках» (PDF) . Архивировано (PDF) из оригинала 28 апреля 2022 г.
  11. ^ Карлссон, Магнус; Халлгрен, Томас (1998). «Fudgets - чисто функциональные процессы с приложениями к графическим пользовательским интерфейсам» (PDF) . Архивировано (PDF) из оригинала 15 октября 2022 г.
  12. ^ Перес, Иван; Баренц, Мануэль; Нильссон, Хенрик (июль 2016 г.), «Функциональное реактивное программирование, рефакторинг», Симпозиум Haskell (PDF)
  13. ^ Аце ван дер Плог; Классен, Коэн. «Практический принцип FRP» (PDF) . Архивировано из оригинала (PDF) 1 июля 2015 г. Проверено 24 июля 2015 г.
  14. ^ Чаплицки, Эван (апрель 2012 г.), Elm: Concurrent FRP для функциональных графических интерфейсов пользователя (PDF) (диссертация), Гарвард, заархивировано из оригинала (PDF) 4 июня 2016 г. , получено 17 февраля 2015 г. {{citation}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  15. ^ Чаплицки, Эван. «Прощание с ФРП» . вяз . Проверено 14 июля 2018 г.
  16. ^ Ван ден Вондер, Сэм; Рено, Тьерри; Ойен, Бьярно; Де Костер, Джоэри; Де Мойтер, Вольфганг (2020), «Борьба с неуклюжим отрядом реактивного программирования: модель актер-реактор», Leibniz International Proceedings in Informatics (LIPIcs) , vol. 166, стр. 19:1–19:29, doi : 10.4230/LIPIcs.ECOOP.2020.19 , ISBN.  9783959771542 , S2CID   260445152
  17. ^ Ван ден Вондер, Сэм; Рено, Тьерри; Де Мойтер, Вольфганг (2022), «Реактивность на уровне топологии в распределенных реактивных программах: реактивное управление знакомством с использованием стад», The Art, Science и Engineering of Programming , vol. 6, стр. 14:1–14:36, arXiv : 2202.09228 , doi : 10.22152/programming-journal.org/2022/6/14 , S2CID   246979565
  18. ^ «РеактивИкс» . ReactiveX.io . Проверено 3 июля 2022 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: F9D5A0FA9AFF9AB4C0AB5EC35DA468F6__1715830620
URL1:https://en.wikipedia.org/wiki/Functional_reactive_programming
Заголовок, (Title) документа по адресу, URL1:
Functional reactive programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)