Я рад, что вы сначала спрашиваете о спецификации, а не о реализации.Существует множество идей о том, что такое FRP.Для меня это всегда были две вещи: (а) денотативное и (б) непрерывное во времени.Многие люди отбрасывают оба этих свойства и идентифицируют FRP с различными понятиями реализация , и все они не имеют смысла в моей перспективе.Чтобы уменьшить путаницу, я хотел бы, чтобы термин «функционально-реактивное программирование» был заменен более точным и описательным «денотативным программированием с непрерывным временем» (DCTP), как это было предложено Джейком Макартуром в беседе в прошлом году .
Под «денотативным» я подразумеваю основанный на точной, простой, независимой от реализации, композиционной семантике, которая точно определяет значение каждого типа и строительного блока.Композиционная природа семантики определяет смысл всех типо-правильных комбинаций строительных блоков.Для меня denoative - это сердце и сущность функционального программирования, и это то, что обеспечивает точные и поддающиеся объяснению рассуждения и, таким образом, основу для правильности, вывода и оптимизации.Питер Ландин рекомендовал «денотативный» в качестве существенной замены нечеткому термину «функциональный» и способ отличить глубоко / действительно функциональное программирование от просто функционально выглядящих обозначений.См. этот комментарий , где приведены некоторые цитаты Ландина и справочный документ.
О непрерывном времени см. Пост Почему программа с непрерывным временем? имоя цитата в ответе AshleyF на этой странице.Я снова и снова удивляюсь, когда слышу утверждение, что идея непрерывного времени как-то неестественно или невозможна для реализации, учитывая дискретную природу компьютеров.Это мышление кажется мне странным, особенно если исходить из Хаскеллера, по нескольким причинам:
- Используя ленивый функциональные языки, мы случайно программируем с бесконечным данные по конечным машинам.В результате мы получаем прекрасную модульность, как показано в классической статье Джона Хьюза Почему функциональное программирование имеет значение .
- Существует множество примеров программирования в непрерывном пространстве, например, векторная графика, а также такие вещи, как Pan .
- Мне нравится, когда мои программы отражают то, как я думаю о проблемном пространстве, а не о машине, которая выполняет программы, и я склонен ожидать другихпрограммисты языка высокого уровня, чтобы поделиться этим предпочтением.(«Язык программирования низкоуровневый, когда его программы требуют к себе никакого отношения.» - Алан Перлис)
Я делаю библиотеки для программирования с непрерывным временем с TBAG и ActiveVRML (первая система DCTP / FRP), а затем Fran .Это легко реализовать правильно.Несколько различных подходов описаны в статье Функциональные реализации непрерывной моделируемой анимации .Реализация непрерывного времени эффективно (и все же правильно!) - это другой вопрос, особенно избегание повторного вычисления неизменных значений.(См. Статью Двухтактное функциональное реактивное программирование .)
Дополнительные замечания см. В моем ответе Разница между реактивной иФункционально-реактивное программирование и Что такое (функциональное) реактивное программирование? Обновление: Подробнее о том, почему непрерывное время имеет значение, см. эти заметки . Обновление: См. Также, мой доклад за 2015 год Сущность и происхождение FRP (и связанных с ним переговоров, связанных там).
Удачи сВаше исследование, и, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.Моя контактная информация на моей домашней странице .