(defprotocol my-protocol
  (foo [this]))

(extend-protocol my-protocol
  clojure.lang.IPersistentMap
  (foo [this] "hello from map"))

(criterium.core/quick-bench
  (satisfies? my-protocol {}))

(criterium.core/quick-bench
  (foo {}))

Simply calling foo on an empty map takes 7 ns,
but checking whether the map satisfies my-protocol takes 22 µs, 3000 times
longer.

It seems like to call foo, some mechanism has to look up an implementation
of my-protocol for maps -- how is it we can do that so quickly for a call
and so slowly for satisfies?

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to