Исток-Системы - Форумы
Поддержка пользователей программных продуктов и библиотек

Сравнение ASDF и LispWorks Common Defsystem

Начать новую тему Новая темаОтветить в тему Ответить    
Администратор
Зарегистрирован 11 окт 2011
Сообщений 36
Сообщение Дата 06 мар 2009 22:39
Сравнение ASDF и LispWorks Common Defsystem  
Большая часть библиотек с исходным кодом на языке Коммон Лисп сопровождается файлом определения системы в формате 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.
     
Показать профиль участника
Администратор
Зарегистрирован 11 окт 2011
Сообщений 36
Сообщение Дата 16 апр 2010 17:00
Сравнение ASDF и LispWorks Common Defsystem  
Дополнения.

3. ASDF не поддерживает логические пути (logical pathnames). Это значит, что если требуется компонент с исходником вне директория системы, в опции :pathname необхдимо указывать "физический" путь. Это весьма странно, ибо логические пути - весьма гибкий механизм, почти незаменимый, если Вы отлаживаетесь на разных компьютерах.

Пример задания логического пути:
:pathname #P"LIB:doc;settings;general.html"

4. В LispWorks 6.0 встроена поддержка ASDF. Определение системы может быть визуализировано в браузера систем (System Browser).

Более полная версия статьи помещена в новый раздел сайта "Лиспа у Истоков" -> Русский LispWorks.
     
Показать профиль участника
 
Начать новую тему Новая тема Ответить в тему Ответить
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
cron