Мы заботимся о «прошлом» в FRP? - PullRequest
20 голосов
/ 02 марта 2012

Когда я возился с реализацией FRP, одна вещь, которую я нашел, сбивает с толку, что делать с прошлым? По сути, я понимал, что я мог бы сделать это с поведением в любой момент:

beh.at(x) // where time x < now

Похоже, что это может быть проблематично с точки зрения производительности в таком случае, как это:

val beh = Stepper(0, event) // stepwise behaviour

Здесь мы видим, что для оценки Поведения в прошлом нам нужно сохранить все События, и мы закончим выполнением (в худшем случае) линейного сканирования каждый раз, когда мы производим выборку.

Хотим ли мы, чтобы эта способность была доступна, или Поведение следует разрешать оценивать только одновременно> = сейчас? Хотим ли мы даже представить функцию at программисту?

1 Ответ

20 голосов
/ 02 марта 2012

Хотя поведение считается функцией времени, опора на произвольный объем прошлых данных в FRP является плохой вещью и называется утечкой времени .То есть преобразования в поведении обычно должны быть потоковыми / реактивными, поскольку они не полагаются на более чем ограниченную часть прошлого (и должны накапливать эти знания истории явно ).

Итак, нет, at нежелательно в реальной системе FRP: не должно быть возможности смотреть ни на прошлое, ни на будущее.(Последнее, конечно, невозможно, если состояние будущего зависит от чего-либо внешнего для системы FRP.)

Конечно, это приводит к проблеме, которая заключается только в возможности взглянуть на точное настоящее строго ограничивает то, что вы можете делать при написании функции для преобразования поведения: Behaviour a -> Behaviour b становится таким же, как a -> b, что делает невозможным многие вещи, которые мы хотели бы сделать.Но это больше проблема поиска семантики, одной из постоянных проблем FRP, чем что-либо еще;до тех пор, пока примитивные преобразования поведения, которые вы предоставляете, достаточно мощны и не вызывают утечек времени, все должно быть хорошо.Для получения дополнительной информации об этом см. Сборщик мусора, семантика FRP .

...