anchor.diff:       (lambda (data)
          (declare (type vector-future data))
          (retain data) ;; maybe we should just abort here...
  -       (setf (vector-future-data data) (make-array allocation :element-type 'double-float))
  +       (let ((vector (make-array allocation :element-type 'double-float)))
  +         (setf (vector-future-data data) vector)
  +         (finalize data (lambda ()
  +                          (sb-kernel:%shrink-vector vector 0))))
          nil))
       (vector-future
        (retain allocation)
  
positive.code:        (retain data)
         (let ((source (vector-future-data allocation)))
           (declare (type (simple-array double-float 1) source))
           (if (= 1 (vector-future-refcount allocation))
               (shiftf (vector-future-data data)
                       (vector-future-data allocation)
                       nil)
               (setf (vector-future-data data)
                     (make-array (length source)
                                 :element-type 'double-float
                                 :initial-contents source)))
           (release allocation))
         nil))))
  
  
negative.code:   (when (= 1 (atomic-decf (vector-future-refcount future)))
      (let ((data (vector-future-data future)))
        (when data
          (setf (vector-future-data future) nil)
          (sb-kernel:%shrink-vector data 0))))
    nil)
  
  (defun make-allocator (allocation)
  