Clojure (, , JVM) , , . /fn/recur, , .
, :
user> (time (loop [a 1]
(if (< a 4)
(let [big (vec (range 10e6))]
(do (println (rand-nth big))
(recur (inc a)))))))
9528975
717854
729682
"Elapsed time: 3753.978349 msecs"
nil
:
user> (def big (vec (range 10e6)))
user> (time (loop [a 1]
(if (< a 4)
(do (println (rand-nth big))
(recur (inc a))))))
4002962
7528467
2596236
"Elapsed time: 0.685522 msecs"
nil
, , , , , .
, ( )
user> (defmacro make-big-vec [] (vec (range 10000)))
user> (time (loop [a 1]
(if (< a 4)
(let [big (make-big-vec)]
(do (println (rand-nth big))
(recur (inc a)))))))
CompilerException java.lang.RuntimeException: Method code too large!, compiling:(/tmp/form-init1716519094506420012.clj:1:7)
1000 .