[racket] Small and short-lived data structures

From: Sam Tobin-Hochstadt (samth at cs.indiana.edu)
Date: Mon Oct 21 14:35:23 EDT 2013

On Mon, Oct 21, 2013 at 12:47 PM, Matthias Felleisen
<matthias at 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:

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 at huor:~/sw/plt/racket/collects/racket/match (master) plt] r /tmp/bench.rkt
cpu time: 40 real time: 44 gc time: 0
cpu time: 72 real time: 73 gc time: 12
cpu time: 192 real time: 191 gc time: 0
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.


Posted on the users mailing list.