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

Мы заботимся о "прошлом" в FRP?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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