Last active
August 29, 2015 14:25
-
-
Save ptaoussanis/0a294809bc9075b6b02d to your computer and use it in GitHub Desktop.
Clojure 1.8.0-alpha2 tuple performance
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; | |
;; LATEST UPDATE: 25 July 2015 | |
;; | |
;; **************************************************************** | |
;; ** NB false alarm! My original benchmarks showing large perf ** | |
;; ** improvements with tuples turned out to be noise, ** | |
;; ** unfortunately. Current (+more reliable) numbers seem[1] to ** | |
;; ** show no consistent significant advantage using currently ** | |
;; ** available tuple implementations against real-world code. ** | |
;; ** ** | |
;; ** Sincere apologies for jumping the gun + publishing dodgy ** | |
;; ** results! - Peter Taoussanis ** | |
;; ** ** | |
;; ** [1] Not a final word; think this'll need more time to ** | |
;; ** become clear one way or the other. ** | |
;; **************************************************************** | |
;; ** Latest results table on Google Docs: https://goo.gl/khgT83 ** | |
;; **************************************************************** | |
*clojure-version* ; + -server jvm | |
(require '[criterium.core :as criterium :refer [bench quick-bench] | |
:rename {quick-bench qb}]) | |
;; [1] 1.7.0 | |
;; [2] 1.8.0-alpha2 | |
;; [3] 1.8.0-snapshot as of b8607d587 | |
;; [4] mikera's fork at https://github.com/mikera/clojure/tree/clj-1517 | |
(let [v [1 2 3 4] | |
v2 [1 2 3 "foo"] | |
x 1 | |
y 2 | |
z 3] | |
; [1] ; [2] ; [3] ; [4] | |
(qb (conj v 5)) ; 59 ; 24 ; 21 ; 22 | |
(qb (assoc v 1 3)) ; 44 ; 74 ; 64 ; 68 | |
(qb (assoc {} :v1 v :v2 v :v3 v)) ; 405 ; 491 ; 388 ; 446 | |
(qb (subvec v 1 3)) ; 27 ; 24 ; 25 ; 26 | |
(qb [x y z]) ; 38 ; 22 ; 21 ; 22 | |
(qb [[[x y z] y z] y z]) ; 91 ; 46 ; 53 ; 49 | |
(qb (let [[x y z] v])) ; 22 ; 103 ; 97 ; 97 | |
(qb (peek v)) ; 16 ; 24 ; 26 ; 27 | |
(qb (pop v)) ; 46 ; 64 ; 65 ; 69 | |
(qb (seq v)) ; 35 ; 35 ; 34 ; 31 | |
(qb (rseq v)) ; 23 ; 19 ; 18 ; 20 | |
(qb (count v)) ; 16 ; 14 ; 15 ; 17 | |
(qb (reduce (fn [acc in]) nil v)) ; 62 ; 182 ; 184 ; 202 | |
(qb (mapv inc v)) ; 361 ; 599 ; 565 ; 559 | |
(qb (into [0] v)) ; 468 ; 560 ; 536 ; 783 | |
(qb (hash [[[x y z] y z] y z])) ; 697 ; 465 ; 468 ; 454 | |
(qb (hash [x y z])) ; 249 ; 238 ; 220 ; 173 | |
(qb (= v v2)) ; 265 ; 306 ; 85 ; 82 | |
) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Rich's latest feedback for anyone following this: http://dev.clojure.org/jira/browse/CLJ-1517?focusedCommentId=40370&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-40370