As for length:

(for ([i 3]) (collect-garbage))
(let ((ls (time (make-list 50000000 0))))
  (time (length ls))
  (time (length ls))
  (time (length ls))
  (void))

It's what I would expect:

cpu time: 6733 real time: 6744 gc time: 6419
cpu time: 141 real time: 141 gc time: 0
cpu time: 145 real time: 145 gc time: 0
cpu time: 142 real time: 142 gc time: 0

- - - - -

Next, thinking about 50000000 elements made me think about vectors,
vector? and vector-length.

This:

(for ([i 3]) (collect-garbage))
(let ((v (time (make-vector 50000000 0))))
  (time (vector-length v))
  (time (vector-length v))
  (time (vector-length v))
  (void))

prints:

cpu time: 182 real time: 183 gc time: 1
cpu time: 315 real time: 315 gc time: 314
cpu time: 0 real time: 0 gc time: 0
cpu time: 0 real time: 0 gc time: 0

Huh?  The first call to vector-length takes even longer than making
the vector (and, seems to be almost entirely gc).

I would have guessed that make-vector would create a structure with
the length already stored in it, and all vector-length calls would be
essentially 0.
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to