当玩弄实现FRP时,我发现一件令人困惑的事情是如何处理过去的事情?基本上,我的理解是,我可以在任何时候用一个行为做到这一点:
beh.at(x) // where time x < now在这样的情况下,这看起来可能是性能方面的问题:
val beh = Stepper(0, event) // stepwise behaviour在这里,我们可以看到,为了评估过去的行为,我们需要保留所有事件,并且我们将在每次采样时执行(最坏情况下)线性扫描。
我们是希望这种能力可用,还是应该现在只允许一次对行为进行>=评估?我们甚至想要向程序员公开at函数吗?
发布于 2012-03-02 10:03:40
虽然行为被认为是时间的函数,但依赖FRP中任意数量的过去数据是一件坏事,被称为时间泄漏。也就是说,行为上的转换通常应该是流式/反应式的,因为它们不会依赖于超过一定数量的过去(并且应该明确地积累这种历史知识)。
因此,不,at在真实的玻璃钢系统中是不可取的:它应该不可能既看过去也看未来。(如果未来的状态取决于FRP系统之外的任何因素,那么后者当然是不可能的。)
当然,这导致了这样一个问题:当编写一个函数来转换行为时,只能看到确切的当前严重限制了您可以做的事情:Behaviour a -> Behaviour b变得与a -> b相同,这使得许多我们想要做的事情变得不可能。但这更多的是一个寻找语义的问题,这是FRP的一个长期存在的问题,而不是其他问题;只要你提供的行为的原始转换足够强大,而不会导致时间泄漏,一切都应该很好。有关这方面的更多信息,请参阅。
https://stackoverflow.com/questions/9526836
复制相似问题