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

Сравнение 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.
     
Показать профиль участника
 
Начать новую тему Новая тема Ответить в тему Ответить
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения