LINUX.ORG.RU

[CL][ASDF] Использование зависимостей


0

1

Сильно и конкретно с ASDF пока не разбирался, просто понял в самых общих чертах, как им пользоваться.

Есть проект usocket, в версии 4.1 он зависил от split-sequence, сейчас она у него прямо внутри. То есть раньше я делал:

(asdf:operate 'asdf:load-op :split-sequence)
(asdf:operate 'asdf:load-op :usocket)

И мог пользоваться как usocket-ами, так и split-sequence-ами. Теперь в версии из svn split-sequence.lisp (отдельного asd-файла нет) просто запечатана внутри усокета, в директории vendor. usocket.asd включает это добро так:

...
:components ((:file "package")
 (:module "vendor" :depends-on ("package")
  :components ((:file "split-sequence")
  ...

Делаю

(asdf:operate 'asdf:load-op :usocket)

Видно, что он загружает все свои файл, в т.ч. vendor/split-sequence.fas, при этом усокет-функции доступны, а сплит-сиквеновские - нет. Как их вытащить правильно? Неправильная попытка - убирание #+ingore-рования defpackage в vendor/split-sequence.lisp - привела к тому, что сам по себе пакет стал доступен, но все его функции все равно нет. И даже сделанный после этого прямой (load этого-файла) не дал никаких результатов.

Короче, я основательно запутался в лисповской пакетной системе и ASDF-огороде вокруг него.

★★★★★

А зачем ты используешь версию из SVN?

Вообще, usocket и split-sequence это две различных библиотеки. Если разработчики usocket решили для уменьшения зависимостей включить split-sequence непосредственно в виде кода (а не через зависимость), то это их личное дело. Ничто не мешает тебе по прежнему пользоваться старым добрым split-sequence. Загружай его как раньше и всё.

archimag ★★★
()
Ответ на: комментарий от archimag

>Ничто не мешает тебе по прежнему пользоваться старым добрым split-sequence. Загружай его как раньше и всё.

Ну так дублирование происходит. Я понимаю, что пять функций - это пустяк, но все равно как-то не хочется пухнуть на ровном месте. К тому же, предполагаю, однажды внутри какого-нибудь другого пакета может оказаться что-нибудь куда более жирное - и как тогда быть? Или такого не случается на практике?

А зачем ты используешь версию из SVN?

Версия 4.1, как я понял, не умеет UDP (пока что все равно на TCP тренируюсь, но скоро нужно UDP будет). Судя по документации, оно появилось в 5.0, но на сайте последний собранный архив 4.1, свежее только svn.

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

> Ну так дублирование происходит.

Это политика разработчиков usocket. Зачем они так делают - надо у них спрашивать, но вообще так не принято. Тем более, что сейчас есть quicklisp и установка зависимостей не должна вызывать затруднений.

Версия 4.1, как я понял, не умеет UDP


Может вместо usocket посмотиршь на iolib (http://common-lisp.net/project/iolib/)? Она моложе, мощнее, поддерживает всякие epoll и не зависит от реализации? (правда кажись с виндой не дружит, но я особо не в курсе)

archimag ★★★
()
Ответ на: комментарий от archimag

Спасибо за разъяснения. На iolib обязательно посмотрю, оно у меня в ближайших планах.

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

> Версия 4.1, как я понял, не умеет UDP (пока что все равно на TCP тренируюсь, но скоро нужно UDP будет). Судя по документации, оно появилось в 5.0, но на сайте последний собранный архив 4.1, свежее только svn.

версия из Quicklisp умеет UDP

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.