Hi, folks
This is small piece of code that is inspired by haxl,
muse(https://github.com/kachayev/muse),
urania(https://github.com/funcool/urania). Not a library.
(defn remote-req [result]
(Thread/sleep 1000)
result)
(defmacro plet [bindings & body]
(let [bents (partition 2 (destructure bindings))
smap (into {} (map (fn [[b _]]
[b `(deref ~b)])
bents))
bindings (vec (mapcat (fn [[b v]]
[b `(future ~(postwalk-replace smap v))])
bents))]
`(let ~bindings
~@(postwalk-replace smap body))))
(time
(let [{:keys [a]} (remote-req {:a 1 :x 2})
b (remote-req 1)
c (+ a b)
d (remote-req 1)
e (remote-req 1)
f (+ d e)]
(+ c f)));; "Elapsed time: 4007.60237 msecs"
(time
(plet [{:keys [a]} (remote-req {:a 1 :x 2})
b (remote-req 1)
c (+ a b)
d (remote-req 1)
e (remote-req 1)
f (+ d e)]
(+ c f)));; "Elapsed time: 1003.733416 msecs"
https://github.com/eunmin/plet
Thanks!
- Eunmin
--
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
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.