  Programming language-design and run-time-implementation require detailed
knowledge about the programs that users want to implement. Acquiring this
knowledge is hard, and there is little tool support to effectively estimate
whether a proposed tradeoff actually makes sense in the context of real world
applications.
  Ideally, knowledge about behaviour of "typical" programs is 1) easily
obtainable, 2) easily reproducible, and 3) easily sharable. We present Spencer,
a web service and API framework for dynamic analysis of a continuously growing
set of traces of standard program corpora. Users do not obtain traces on their
own, but can instead send queries to the web service that will be executed on a
set of program traces. Queries are built in terms of a set of query combinators
that present a high level interface for working with trace data. Since the
framework is high level, and there is a hosted collection of recorded traces,
queries are easy to implement. Since the data sets are shared by the research
community, results are reproducible. Since the actual queries run on one (or
many) servers that provide analysis as a service, obtaining results is possible
on commodity hardware.
  Data in Spencer is meant to be obtained once, and analysed often, making the
overhead of data collection mostly irrelevant. This allows Spencer to collect
more data than traditional tracing tools can afford within their performance
budget. Results in Spencer are cached, making complicated analyses that build
on cached primitive queries speedy.
