Большая часть библиотек с исходным кодом на языке Коммон Лисп сопровождается файлом определения системы в формате ASDF. В LispWorks встроен собственный способ определения систем исходных файлов - макрос lw:defsystem и сопутствующие функции. Стоит ли их использовать, несмотря на наличие более универсальной и работающей на разных реализациях Лисп asd:defsystem?
За годы работы у меня сложилось впечатление, что стоит.
1. Определение в специальном пакете.
asd:defsystem рекомендуют помещать в собственный уникальный пакет. В целом, это слегка обременяет пакетную систему Лисп-реализации и выглядит не очень элегантно. Можно этого не делать и помещать в пакет cl-user, но это грозит конфликтами символов.
lw:defsystem не требует пакета - все будет работать без проблем в пакете cl-user.
2. Разделение скомпилированных файлов.
lw:defsystem позволяет отдельно хранить бинарники в собственных папка в зависимости от опций, например:
Код:
(lw:defsystem my-system (: object-pathname (lw:current-pathname
#+debug "bin/debug/"
#- debug "bin/"))
...)
Значит, отладочная версия проекта всегда будет храниться отдельно от окончательной, причем обе отделены
Напротив, asd:defsystem помещает бинарники в тот же директорий, где и исходные Лисп-файлы. Разделение разных "версий" скомпилированных файлов невозможно встроеннымы средствами. Можно, конечно, определить подкласс asd:system, но это будет уже другая система
Если кому интересно, как, спрашивайте.
В целом, lw:defsystem берёт начало от Лисп-машин и лучше подходит для процесса разработки. Встроенный в LispWorks IDE браузер систем обеспечивает наглядность и дополнительные удобства.
Для дистрибуции же готового проекта asd:defsystem вполне достатотчно.
При необходимости можно использовать утилиту из комплекта
lw-add-ons, позволяющую транслировать "на лету" определение системы:
asd:defsystem -> lw:defsystem.