In many cases, the size of the image can be reduced if part of the user code or data is eliminated, for example, when this code or data is present only for debugging purposes. The system, however, cannot tell which part of the code or data can be eliminated, so you have to do it yourself.
That can be done in either of two ways:
fmakunbound
,
makunbound
,
remhash
and so on. The advantage of this approach is that it does not require you to know anything about Delivery. The disadvantage of this is that these calls must be put explicitly in the delivery script.
The "Delivery actions" action list is executed when the delivery process starts, before any system action. For example, if
*my-hash-table*
contains entries that are not required in the delivered application, then you may write:
(defun clear-my-hash-table()
(maphash #'(lambda (x y)
(unless (required-in-the-application-p x y)
(remhash x *my-hash-table*)))
*my-hash-table*))
(define-action "delivery actions" "Clear my hash table"
'clear-my-hash-table)
Using the action list has two advantages:
deliver
script, so it can be written near the code that uses
*my-hash-table*
. This makes it easier to maintain that code.
(setf delivery-value)
.