Estoy implementando un marco de FRP en Scala y parece que me he encontrado con un problema. Motivado por un poco de pensamiento, esta pregunta me decidió restringir la interfaz pública de mi marco de modo Comportamientos solamente pudieron ser evaluados en el 'presente' es decir:Implementación de instantáneas en FRP
behaviour.at(now)
Esto también está en consonancia con la hipótesis de Conal en el papel de Fran que Los comportamientos solo se evalúan/prueban cada vez más. Se restringe transformaciones en los comportamientos pero por lo demás nos encontramos en enormes problemas con los comportamientos que representan una cierta entrada:
val slider = Stepper(0, sliderChangeEvent)
Con este comportamiento, la evaluación de los valores futuros sería incorrecto y la evaluación de los valores del pasado requeriría una cantidad ilimitada de memoria (todas las ocurrencias usadas en el evento 'slider' tendrían que ser almacenadas).
Tengo problemas con la especificación para el funcionamiento de "instantánea" en Comportamientos dada esta restricción. Mi problema se explica mejor con un ejemplo (usando el control deslizante se mencionó anteriormente):
val event = mouseB // an event that occurs when the mouse is pressed
val sampler = slider.snapshot(event)
val stepper = Stepper(0, sampler)
mi problema aquí es que si se ha producido el evento 'mouseB' cuando se ejecuta este código, entonces el valor actual de 'paso a paso' voluntad ser la última 'muestra' de 'control deslizante' (el valor en el momento en que ocurrió la última ocurrencia). Si la hora de la última ocurrencia está en el pasado, consecuentemente terminaremos evaluando el 'control deslizante' usando un tiempo pasado que rompe el conjunto de reglas anterior (y su suposición original). Puedo ver un par de maneras de resolver esto:
- Nos 'registro' el pasado (mantener la suspensión de todas las ocurrencias del pasado en un evento) que permite la evaluación de los comportamientos con los tiempos pasados (usando una cantidad ilimitada de memoria)
- Modificamos 'snapshot' para tomar un argumento de tiempo ("sample after this time") y aplicamos ese tiempo> = now
- En un movimiento más loco, podríamos restringir la creación de objetos FRP a la configuración inicial de un programe de alguna manera y solo empiece a procesar eventos/entrada una vez que se complete esta configuración
También podría simplemente no implementar 'sample' o eliminar 'stepper'/'switcher' (pero realmente no quiero hacer ninguna de estas cosas). ¿Alguien tiene alguna idea sobre esto? ¿He malentendido algo aquí?
Usted está al tanto de [Reactive] (http://www.reactive-web.co.cc/), ¿verdad? –
Reactiva es genial, pero rompe algunas ideas en FRP. Por ejemplo, no tiene una noción de Comportamientos continuos: las señales en Reactivo cambian discretamente en el tiempo entre diferentes valores. Originalmente estaba confundido sobre cómo encaja esto en FRP y hace una pregunta: Hace un tiempo, http://stackoverflow.com/questions/7451317/is-the-signal-representation-of-functional-reactive-programming-correct – seadowg
Reactive en realidad no tiene ninguna funcionalidad como 'snapshot' por lo que yo sé. – seadowg