code: func NewSummary(opts SummaryOpts) Summary {
  	return newSummary(
  		NewDesc(
  			BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
  			opts.Help,
  			nil,
  			opts.ConstLabels,
  		),
  		opts,
  	)
  }
docs: // Problem with the sliding-window decay algorithm... The Merge method of
  // perk/quantile is actually not working as advertised - and it might be
  // unfixable, as the underlying algorithm is apparently not capable of merging
  // summaries in the first place. To avoid using Merge, we are currently adding
  // observations to _each_ age bucket, i.e. the effort to add a sample is
  // essentially multiplied by the number of age buckets. When rotating age
  // buckets, we empty the previous head stream. On scrape time, we simply take
  // the quantiles from the head stream (no merging required). Result: More effort
  // on observation time, less effort on scrape time, which is exactly the
  // opposite of what we try to accomplish, but at least the results are correct.
  //
  // The quite elegant previous contraption to merge the age buckets efficiently
  // on scrape time (see code up commit 6b9530d72ea715f0ba612c0120e6e09fbf1d49d0)
  // can't be used anymore.
  // NewSummary creates a new Summary based on the provided SummaryOpts.