anchor.diff:  
       (bt:make-thread #'work-fn :name (format nil "pool-worker[~S]" id))))
   
  -
  -;;; Job Class
  -(defclass job ()
  -  ((id :initarg :id
  -       :reader id
  -       :documentation "String identifier of the background job. Should match the key in the work table.")
  -   (stamps :initform (list (cons :new (get-internal-real-time)))
  -           :accessor stamps
  -           :documentation "A list of events and time-stamps in the format of (:event . time) in
  -reverse-chronological order. Possible events are: `:new' `:active' `:done' `:error'")
  -
  -   (thunk :initarg :thunk
  -          :accessor thunk
  -          :initform (lambda () :badjob)
  -          :documentation "Invoked when the job is scheduled to execute.")
  -
  -   (result :accessor result
  -           :documentation "The result of evaluating `thunk'.")
  -
  -   (finish :initarg :finish
  -           :reader finish
  -           :initform (lambda (result) (declare (ignore result)))
  -           :documentation "Invoked on successful run of `thunk'  with the return value in the original thread.")
  -   (fail :initarg :fail
  -         :reader fail
  -         :initform (lambda (condition) (declare (ignore condition)))
  -         :documentation "Invoked on a failed run of `thunk' with the condition signaled in the original thread.")))
  +(defmethod submit :before ((pool pool) (job job))
  +  "Resume the response gathering socket."
  +  (resume (result-sock pool)))
  +
  +(defmethod submit ((pool pool) (job job))
  +  "Submit a job to the pool"
  +  (setf (gethash (id job) (work pool)) job)
  +  (format t "Sending job: ~S to pool ~S~%" (id job) pool)
  +  (zmq:send! (work-sock pool) (id job)))
   
   (defgeneric perform (job)
     (:documentation "Perform the job and either store success or failure.
  
positive.code:                             (remove nil (list
                                           (when ,e!success (list :finish ,e!success))
                                           (when ,e!failure (list :fail ,e!failure))))))))
         (setf (gethash ,g!job-id (work ,e!pool)) ,g!job)
         (format t "Sending job: ~S to pool ~S~%" ,g!job-id ,e!pool)
         (zmq:send! (work-sock ,e!pool) ,g!job-id)
         ,g!job-id)))
  
negative.code: ;;;; Generics
  (defgeneric make-worker (pool &optional id)
    (:documentation "Return a running thread ready to do work for the given pool."))
  
  (defgeneric submit (pool job)
    (:documentation "Submit a job for execution to the pool"))
  
  ;;;; Lifecycle methods
  (defmethod bind ((pool pool) sub-mask &optional host)
  