On Mon, Oct 21, 2013 at 12:47 PM, Matthias Felleisen <matth...@ccs.neu.edu> wrote: > > In general, it is a mistaken assumption however that even in a > 'managed' language -- such as Java or Racket -- mutation is still > faster than de/allocation of short-lived data structures. If you > choose to go with 'managed' language, you need to adapt your > programming style to the new context.
Sadly, this assumption is often right for Racket today, even though we have a pretty good allocator. Here's a simple benchmark: https://gist.github.com/samth/7088570 This just passes multiple arguments between two functions in three ways: with a cons, with multiple values, and by mutating an mcons (plus a direct version with two local variables). In all cases, it's as fast as I can make it, using unsafe operations where appropriate. Here are some representative timings: [samth@huor:~/sw/plt/racket/collects/racket/match (master) plt] r /tmp/bench.rkt 'direct cpu time: 40 real time: 44 gc time: 0 'cons cpu time: 72 real time: 73 gc time: 12 'values cpu time: 192 real time: 191 gc time: 0 'mcons cpu time: 48 real time: 51 gc time: 0 Direct is always fastest, multiple values are very slow, and cons is always slower than mcons. Even if we ignore GC time, the functional version is still always slower. Sam ____________________ Racket Users list: http://lists.racket-lang.org/users