Sto implementando un framework FRP in Scala e sembra che si sia verificato un problema. Motivato da qualche pensiero, questa domanda ho deciso di limitare l'interfaccia pubblica del mio quadro così Comportamenti potrebbe essere valutata solo nel 'presente' cioè:Implementazione dell'istantanea in FRP
behaviour.at(now)
Questo rientra anche in linea con assunzione di Conal nella carta Fran che I comportamenti vengono valutati/campionati solo in momenti crescenti. Essa limita le trasformazioni sui comportamenti ma per il resto ci troviamo in enormi problemi con i comportamenti che rappresentano un certo input:
val slider = Stepper(0, sliderChangeEvent)
Con questo comportamento, valutando i valori futuri sarebbe scorretto e la valutazione di valori passati richiederebbe una quantità illimitata di memoria (tutte le occorrenze utilizzate nell'evento "slider" dovrebbero essere memorizzate).
Ho riscontrato problemi con le specifiche per l'operazione "snapshot" su Behaviors data questa restrizione. Il mio problema è spiegato meglio con un esempio (utilizzando il cursore di cui sopra):
val event = mouseB // an event that occurs when the mouse is pressed
val sampler = slider.snapshot(event)
val stepper = Stepper(0, sampler)
mio problema è che se Event 'mouseB' è verificato quando questo codice viene eseguito quindi il valore corrente di 'stepper' sarà essere l'ultimo 'campione' di 'slider' (il valore al momento in cui si è verificata l'ultima occorrenza). Se il tempo dell'ultima occorrenza è nel passato, di conseguenza, si finirà per valutare il "cursore" utilizzando un tempo passato che infrange la regola impostata sopra (e l'ipotesi originale). Posso vedere un paio di modi per risolvere questo:
- Noi 'record' del passato (tenere in mano tutte le occorrenze passate in un evento) che consente la valutazione dei comportamenti con altri tempi (utilizzando una quantità illimitata di memoria)
- Modifichiamo 'snapshot' per prendere un argomento di tempo ("campione dopo questa volta") e applicalo ora> = now
- In una mossa più stravagante, potremmo limitare la creazione di oggetti FRP alla configurazione iniziale di un programma in qualche modo e solo avviare l'elaborazione di eventi/input dopo questa configurazione è completata
Potrei anche semplicemente non implementare 'sample' o rimuovere 'stepper'/'switcher' (ma non voglio davvero fare nessuna di queste cose). Qualcuno ha qualche pensiero su questo? Ho frainteso qualcosa qui?
Sei a conoscenza di [Reattivo] (http://www.reactive-web.co.cc/), vero? –
Reattivo è bello ma rompe alcune idee in FRP. Ad esempio, non ha una nozione di Behaviors continui: i Segnali in Reattivo cambiano in modo discreto nel tempo tra valori diversi. Inizialmente ero confuso su come questo si adattasse a FRP e ho fatto questa domanda qualche tempo fa: http://stackoverflow.com/questions/7451317/is-the-signal-representation-of-functional-reactive-programming-correct – seadowg
Inoltre, Reattivo in realtà non ha alcuna funzionalità come 'istantanea' per quanto posso dire. – seadowg