First, the alphabet-macro is wrong, it should use name instead of str in
comp:
user=> (macroexpand-1 '(alphabet-macro))
(do (clojure.core/defrecord Alphabet [:a :b :c :d :e :f :g :h :i :j :k :l
:m :n :o :p :q :r :s :t :u :w :v :x :y :z]) (def dummy-record (Alphabet. 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25)))
user=> (get dummy-record :a)
nil
fixed it with name:
(defmacro alphabet-macro []
`(do
(defrecord ~'Alphabet [~@(map (comp symbol name) a-z-ks)])
(def ~'dummy-record (~'Alphabet. ~@(range 26)))))
(alphabet-macro)
user=> (macroexpand-1 '(alphabet-macro))
(do (clojure.core/defrecord Alphabet [a b c d e f g h i j k l m n o p q r s
t u w v x y z]) (def dummy-record (Alphabet. 0 1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24 25)))
user=> (get dummy-record :a)
0
After fixed, the benchmark result is as expected.
2017-10-08 16:40 GMT+08:00 Jiacai Liu <[email protected]>:
> As I read JoyOfClojure, it says one of reasons that prefer record over
> plain map is speed, out of curiosity I test this using
> https://github.com/hugoduncan/criterium, but the result is just contrary
> to my expectation. record is slower than map. Is there any optimizations
> made to clojure 1.8.0 ?
>
> test code: https://gist.github.com/jiacai2050/
> cdaaffa93079a4b8451727ace0c13064
>
> --
> 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.
>
--
庄晓丹
Email: [email protected]
Site: http://fnil.net
不学习,毋宁死
--
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.