Спецификация для функционального реактивного языка программирования


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

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

2 57

2 ответа:

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

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

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

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

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

для соответствующих замечаний, пожалуйста, смотрите мой ответ разница между реактивным и функционально-реактивным программированием и что такое (функциональное) реактивное программирование?обновление: подробнее о том, почему непрерывное время имеет значение, см. эти заметки. обновление: Смотрите также, Мой 2015 talk сущность и происхождение FRP (и связанные с этим переговоры связаны там).

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

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

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

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

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

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

решите это, и вы будете героем!