Default value: (>= *delivery-level* 5)
Defines what to with symbol names. When it is nil
, or when :packages-to-keep-symbol-names is :all
, all symbol names are kept. When symbol-names-action is t
, symbol names (except those which are kept by :keep-symbol-names, :keep-keyword-names or :packages-to-keep-symbol-names) are changed to the same string "Dummy Symbol Name"
.
symbol-names-action is treated as nil
unless the treeshaker is invoked during delivery (see :shake-shake-shake).
Compatibility Note:
in LispWorks 4.4 and previous on Windows and Linux platforms, :symbol-names-action t
shortens symbol names to a three-character unique code. This has changed, as described above, in LispWorks 5.0 and later.
Removing symbol names makes it very difficult to debug the application, and it is assumed that it is done after the application is essentially error free. However, some applications may make use of symbol names as strings, which may cause errors to appear only when the symbol names are removed. In some cases the easiest solution is to retain symbol names. This will result in a larger executable, though the size increase is usually small.
If you do want to remove symbol names and need to debug your application, symbol-names-action takes these other values :spell-error
, :reverse
, :invert
and :plist
. Note that these other values are only useful when debugging an application which works with symbol-names-action nil
but not with symbol-names-action t
. In other cases they simply make debugging difficult to no advantage.
In the case of :spell-error
(which is probably the most useful), the last alphabetic characters in the first 6 characters of the symbol name are rotated by one, that is, A becomes B, g becomes h, and Z becomes A. This leaves the symbol names quite readable, but any function that relies on symbol names fails. A more drastic effect is achieved by the value :reverse
, which reverses the symbol name. The value :invert
just changes the case of every alphabetic character to the other case. This is more readable than :spell-error
, but if the application relies on symbol names but does not care about case, the errors do not appear. The value :plist
causes the symbol names to be set to the dummy name, but the old string is being put on the plist
of the symbol (get symbol `sys::real-symbol-name)
. A simple backtrace (obtained after :error-handler :btrace
) uses this property when it exists to get the symbol name to display.
If the debugging shows that some symbols must retain their symbol name for the application to work, this must be flagged to deliver by either :keep-symbol-names or :packages-to-keep-symbol-names.
After debugging your delivered application using :spell-error
, :reverse
, :invert
or :plist
, you may want the production build to be done with symbol-names-action t
to remove symbol names and achieve a small reduction in size.
Compatibility Note:
in LispWorks 4.4 and previous on Windows and Linux platforms, :symbol-names-action
allows the value :dump
. This is no longer supported.
LispWorks Delivery User Guide - 10 Aug 2017