anchor.diff:  
   (defun buffer-redo (point)
     (let ((buffer (point-buffer point)))
  -    (push :separator (buffer-undo-stack buffer))
  +    (vector-push-extend :separator (buffer-edit-history buffer))
       (let ((result0 nil))
         (loop :for result := (buffer-redo-1 point)
               :while result
               :do (setf result0 result))
         (unless result0
  -        (assert (eq :separator (car (buffer-undo-stack buffer))))
  -        (pop (buffer-undo-stack buffer)))
  +        (assert (eq :separator
  +                    (last-edit-history buffer)))
  +        (vector-pop (buffer-edit-history buffer)))
         result0)))
   
   (defun buffer-undo-boundary (&optional (buffer (current-buffer)))
  -  (unless (eq :separator (car (buffer-undo-stack buffer)))
  -    (push :separator (buffer-undo-stack buffer))))
  +  (unless (eq :separator (last-edit-history buffer))
  +    (vector-push-extend :separator (buffer-edit-history buffer))))
   
   (defun buffer-value (buffer name &optional default)
     @lang(:jp "`buffer`のバッファ変数`name`に束縛されている値を返します。  
  
positive.code:     (setf (%buffer-keep-binfo buffer) nil)
      (setf (buffer-nlines buffer) 1)
      (setf (buffer-%modified-p buffer) 0)
      (setf (buffer-undo-size buffer) 0)
      (setf (buffer-undo-stack buffer) nil)
      (setf (buffer-redo-stack buffer) nil)
      (setf (buffer-variables buffer) (make-hash-table :test 'equal))
      (let ((line (make-line nil nil "")))
  
negative.code:     :initform nil
      :initarg :nlines
      :accessor buffer-nlines)
     (edit-history
      :initform (make-array 0 :adjustable t :fill-pointer 0)
      :accessor buffer-edit-history)
     (redo-stack
      :initform nil
      :accessor buffer-redo-stack)
     (external-format
      :initform nil
  