anchor.diff:  (defmacro with-facet ((facet (cube facet-name &key (direction :io) type))
                         &body body)
     "Bind the variable FACET to the facet with FACET-NAME of CUBE. FACET
  -is to be treated as dynamic extent: it is not allowed to keep a
  -reference to it. For the description of the DIRECTION parameter, see
  -the type DIRECTION."
  +  is to be treated as dynamic extent: it is not allowed to keep a
  +  reference to it. For the description of the DIRECTION parameter, see
  +  the type DIRECTION."
     `(call-with-facet* ,cube ,facet-name ,direction
                        (lambda (,facet)
                          ,@(when type `((declare (type ,type ,facet))))
  
positive.code: 
  (defun check-no-watchers (cube message-format &rest message-args)
    "Signal an error if CUBE has active views regardless of the
  direction."
    (assert (notany #'has-watchers-p (views cube)) ()
            "~A because ~
             ~S has active views. If you are sure that this is a false ~
  
negative.code: (defmacro compare-and-swap (place old-value new-value)
    #+sbcl
    (alexandria:with-unique-names (old-val-var)
      `(let ((,old-val-var ,old-value))
         (eq ,old-val-var (sb-ext:compare-and-swap ,place ,old-val-var
                                                   ,new-value))))
    #+ccl
    `(ccl::conditional-store ,place ,old-value ,new-value)
    #+lispworks
    `(system:compare-and-swap ,place ,old-value ,new-value)
    #+allegro
    `(excl:atomic-conditional-setf ,place ,new-value ,old-value)
    #-(or allegro lispworks ccl sbcl)
    (error "Not supported."))
  
  
  