The second is faster because an intermediate list requires more
allocation than an intermediate array of values.

(The `call-with-values' expression is compiled to an internal
`apply-values' form, so no closure is allocated in that case. Also,
`make-prefab-struct' receives its arguments in an internal array in
either case.)

At Mon, 22 Feb 2010 08:42:08 -0700, Jay McCarthy wrote:
> I guess my real question is: should I rely on this or is it a coincidence?
> 
> Jay
> 
> On Mon, Feb 22, 2010 at 8:40 AM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu> 
> wrote:
> > On Mon, Feb 22, 2010 at 10:37 AM, Jay McCarthy <jay.mccar...@gmail.com> 
> wrote:
> >> How should I expect these two lines to compare performance-wise:
> >>
> >> (apply make-prefab-struct
> >>                    (vector->list v))
> >>
> >> vs
> >>
> >> (call-with-values (lambda () (vector->values v))
> >>                               make-prefab-struct)
> >
> > #lang scheme
> >
> > (define v '#(foo 1 2 3))
> >
> > (define k 1000000)
> >
> > (define (run1)
> >  (for ((i (in-range k)))
> >    (apply make-prefab-struct
> >           (vector->list v))))
> >
> >
> > (define (run2)
> >  (for ((i (in-range k)))
> >    (call-with-values (lambda () (vector->values v))
> >                      make-prefab-struct)))
> >
> > (time (run1))
> > (time (run2))
> >
> > cpu time: 1068 real time: 1075 gc time: 60
> > cpu time: 864 real time: 866 gc time: 44
> >
> >
> >
> >
> > --
> > sam th
> > sa...@ccs.neu.edu
> >
> 
> 
> 
> -- 
> Jay McCarthy <j...@cs.byu.edu>
> Assistant Professor / Brigham Young University
> http://teammccarthy.org/jay
> 
> "The glory of God is Intelligence" - D&C 93
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-dev
_________________________________________________
  For list-related administrative tasks:
  http://list.cs.brown.edu/mailman/listinfo/plt-dev

Reply via email to