Ray Racine
2008-09-14 15:05:18 UTC
Naively I did not expect this result in the sense of O(1) for vector-like
vs. O(n) of cons lists.
Records are almost 10x slower then cons lists.
(import (rnrs))
(import (err5rs records syntactic))
(import (primitives time))
(define-record-type rec
#t #t a b c d e)
'records
(time
(let ((r (make-rec 'a 'b 'c 'd 'e)))
(do ((i 10000000 (fx- i 1)))
((fxzero? i) (rec-e r))
(rec-a r)
(rec-b r)
(rec-c r)
(rec-d r)
(rec-e r))))
'lists
(time
(let ((data '(a b c d e)))
(do ((i 10000000 (fx- i 1)))
((fxzero? i) (cadr (cdddr data)))
(car data)
(cadr data)
(caddr data)
(cadddr data)
(cadr (cdddr data)))))
Elapsed time...: 1126 ms (User: 1126 ms; System: 0 ms)
Elapsed GC time: 0 ms (CPU: 0 in 0 collections.)
e
Elapsed time...: 129 ms (User: 129 ms; System: 0 ms)
Elapsed GC time: 0 ms (CPU: 0 in 0 collections.)
e
Ray
vs. O(n) of cons lists.
Records are almost 10x slower then cons lists.
(import (rnrs))
(import (err5rs records syntactic))
(import (primitives time))
(define-record-type rec
#t #t a b c d e)
'records
(time
(let ((r (make-rec 'a 'b 'c 'd 'e)))
(do ((i 10000000 (fx- i 1)))
((fxzero? i) (rec-e r))
(rec-a r)
(rec-b r)
(rec-c r)
(rec-d r)
(rec-e r))))
'lists
(time
(let ((data '(a b c d e)))
(do ((i 10000000 (fx- i 1)))
((fxzero? i) (cadr (cdddr data)))
(car data)
(cadr data)
(caddr data)
(cadddr data)
(cadr (cdddr data)))))
records
Words allocated: 0
Words reclaimed: 0Words allocated: 0
Elapsed time...: 1126 ms (User: 1126 ms; System: 0 ms)
Elapsed GC time: 0 ms (CPU: 0 in 0 collections.)
e
lists
Words allocated: 0
Words reclaimed: 0Words allocated: 0
Elapsed time...: 129 ms (User: 129 ms; System: 0 ms)
Elapsed GC time: 0 ms (CPU: 0 in 0 collections.)
e
Ray