Исток-Системы - Форумы
http://forum.ystok.ru/

Сравнение ASDF и LispWorks Common Defsystem
http://forum.ystok.ru/viewtopic.php?f=15&t=16

Автор:Admin
Дата: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.
Автор:Admin
Дата: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.
стр. 1 из 1 Часовой пояс: UTC + 3 часа
Разработка сайта Исток-Системы (www.ystok.ru) | Powered by phpBB (www.phpbb.com)