Спецификация для языка функционального реактивного программирования - PullRequest
58 голосов
/ 04 мая 2011

В какой-то момент я пытаюсь возиться с созданием функциональной реактивной структуры.Я много читал об этом и видел несколько примеров, но я хотел получить четкое представление о том, что должен делать этот фреймворк, чтобы считаться расширением FRP / dsl.На самом деле меня не волнуют проблемы реализации или специфика и т. Д., А больше о том, что было бы желательно в ситуации идеального мира.

Какими были бы ключевые операции и качества идеального функционально-реактивного языка программирования?

Ответы [ 2 ]

113 голосов
/ 04 мая 2011

Я рад, что вы сначала спрашиваете о спецификации, а не о реализации.Существует множество идей о том, что такое FRP.Для меня это всегда были две вещи: (а) денотативное и (б) непрерывное во времени.Многие люди отбрасывают оба этих свойства и идентифицируют FRP с различными понятиями реализация , и все они не имеют смысла в моей перспективе.Чтобы уменьшить путаницу, я хотел бы, чтобы термин «функционально-реактивное программирование» был заменен более точным и описательным «денотативным программированием с непрерывным временем» (DCTP), как это было предложено Джейком Макартуром в беседе в прошлом году .

Под «денотативным» я подразумеваю основанный на точной, простой, независимой от реализации, композиционной семантике, которая точно определяет значение каждого типа и строительного блока.Композиционная природа семантики определяет смысл всех типо-правильных комбинаций строительных блоков.Для меня denoative - это сердце и сущность функционального программирования, и это то, что обеспечивает точные и поддающиеся объяснению рассуждения и, таким образом, основу для правильности, вывода и оптимизации.Питер Ландин рекомендовал «денотативный» в качестве существенной замены нечеткому термину «функциональный» и способ отличить глубоко / действительно функциональное программирование от просто функционально выглядящих обозначений.См. этот комментарий , где приведены некоторые цитаты Ландина и справочный документ.

О непрерывном времени см. Пост Почему программа с непрерывным временем? имоя цитата в ответе AshleyF на этой странице.Я снова и снова удивляюсь, когда слышу утверждение, что идея непрерывного времени как-то неестественно или невозможна для реализации, учитывая дискретную природу компьютеров.Это мышление кажется мне странным, особенно если исходить из Хаскеллера, по нескольким причинам:

  • Используя ленивый функциональные языки, мы случайно программируем с бесконечным данные по конечным машинам.В результате мы получаем прекрасную модульность, как показано в классической статье Джона Хьюза Почему функциональное программирование имеет значение .
  • Существует множество примеров программирования в непрерывном пространстве, например, векторная графика, а также такие вещи, как Pan .
  • Мне нравится, когда мои программы отражают то, как я думаю о проблемном пространстве, а не о машине, которая выполняет программы, и я склонен ожидать другихпрограммисты языка высокого уровня, чтобы поделиться этим предпочтением.(«Язык программирования низкоуровневый, когда его программы требуют к себе никакого отношения.» - Алан Перлис)

Я делаю библиотеки для программирования с непрерывным временем с TBAG и ActiveVRML (первая система DCTP / FRP), а затем Fran .Это легко реализовать правильно.Несколько различных подходов описаны в статье Функциональные реализации непрерывной моделируемой анимации .Реализация непрерывного времени эффективно (и все же правильно!) - это другой вопрос, особенно избегание повторного вычисления неизменных значений.(См. Статью Двухтактное функциональное реактивное программирование .)

Дополнительные замечания см. В моем ответе Разница между реактивной иФункционально-реактивное программирование и Что такое (функциональное) реактивное программирование? Обновление: Подробнее о том, почему непрерывное время имеет значение, см. эти заметки . Обновление: См. Также, мой доклад за 2015 год Сущность и происхождение FRP (и связанных с ним переговоров, связанных там).

Удачи сВаше исследование, и, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.Моя контактная информация на моей домашней странице .

5 голосов
/ 04 мая 2011

Полагаю, вы, наверное, видели доклад Матиаса Феллайзена о функциональном вводе / выводе и читали его статью .Я думаю, что это очень прагматичный и красивый подход.Надеюсь, вы также наткнулись на отличную работу Конала Эллиота .

Мои личные требования заключаются в том, чтобы система была абсолютно чистой.То есть все поведение определяется чистыми world->world функциями, а вся реализация или визуализация определяется world->visual функциями;где visual - это некоторое статическое описание вывода из системы.

Моей другой основной функцией будет исторический отладчик.Поддерживать историю world состояний и воспроизводить их в любой момент времени должно быть относительно просто.

Одной из областей чрезвычайно интересных исследований (я считаю, что нерешенная проблема) будет использование непрерывного времени.вместо итерации функций world->world на некоторых дискретных часах тиков .Однажды я написал несколько сообщений в блоге на FRP и Conal Elliott , оставивший следующий провокационный комментарий:

Мне нравятся денотативные / функциональные подходы, для компоновки исемантическая ясность.По тем же причинам я предпочитаю непрерывное время и пространство, а не дискретное время и пространство.Во всех этих случаях менее машиноподобная формулировка хорошо отделяет то, что от того, как ее машинная презентация.

Решите это, и вы станете героем!

...