Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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