2010/8/5 Meikel Brandmeyer <[email protected]>

> Hi Laurent,
>
> On Aug 5, 9:41 am, Laurent PETIT <[email protected]> wrote:
>
> > Here is what I've come up in my head :
> >  * create a datastructure with 2 fields, one holding a future, one
> holding a
> > delay. the future will "wait" for n millisecs, and then force the delay.
> >  * The datastructure will accept the future API and delegate all calls to
> > the future,*except* for the deref call which will bypass the future and
> > deref the delay instead
> >
> > What do you think ?
>
> How about this:
>
> (def *parser* (agent nil))
>
> (defn schedule-parse
>  []
>  (send *parser* (constantly (delay (parse-stuff)))))
>
> (defn trigger-parse
>  ([] (trigger-parse 0)
>  ([delay-in-millis]
>   (future
>     (when (pos? delay-in-millis)
>       (Thread/sleep delay-in-millis))
>     (let [result (promise)]
>       (send *parser* #(do (deliver result @%) %)))
>       @result)))))
>
> In the instantaneous case it creates an unnecessary future, but this
> is the same with your approach as I understand it. One could save that
> if one drops the requirement to implement the future API on the return
> value. Or one wraps up the return value in a proxy implementing the
> future API with no-ops + deref. The agent coordinates scheduled parser
> runs. Changing the buffer schedules a new parse run. In between any
> trigger-parse uses the cached one.
>
> Does that make sense?
>
>
Looks complex.

One think I forgot to mention is that by making the datastructure implement
the future API, I *desire* the ability to cancel the future while it's still
sleeping : so that when the user types fast, intemediate values are not
computed at all.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to