Как управлять общими зависимостями lisp?

Что такое Lisp-эквивалент файла требований pip, ruby ​​gemfile, node package.json и т. Д.? Я не совсем уверен, как связаны asdf и quicklisp, если это правильные вещи для использования.


person deadghost    schedule 31.10.2013    source источник


Ответы (4)


Файл .asd - это файл требований. Используйте quicklisp для установки требований.

Используйте ASDF для определения «системы». Создайте my-system.asd файл.

(asdf:defsystem #:my-system
  :serial t
  :description "Describe my-system here"
  :author "My Name <[email protected]>"
  :license "Specify license here"
  :depends-on (#:hunchentoot
               #:cl-who)
  :components ((:file "package")
               (:file "dispatch")))

Это создает систему с именем #: my-system. Я не совсем уверен, что обозначает символ #, поскольку я видел определения системы без него в исходном коде. Требуется только первая строка. :depends-on указывает ASDF загрузить другие системы перед обработкой этого нового определения системы. В этом случае загружаются #:hunchentoot и #:cl-who. :components загружать определенные файлы. package.lisp и dispatch.lisp загружены. :serial t говорит ему загрузить его по порядку. Это важно, если, скажем, dispatch.lisp зависит от чего-то в package.lisp, так что сначала нужно загрузить package.lisp.

Используйте quicklisp, чтобы загрузить и установить зависимости в :depends-on. Запускаем (ql:quickload "my-system").

Я не видел никаких признаков управления версиями.

person deadghost    schedule 02.11.2013
comment
#: означает неорганизованные символы (не обязательно). Что касается управления версиями, в defsystem есть соответствующее поле :version. - person Vsevolod Dyomkin; 03.11.2013

Прежде всего, requirements.txt pip сильно отличается от package.json rubygem или node: первый указывает только зависимости, а второй описывает пакет, включая его зависимости.

Python pip фактически также полагается на аналогичный формат описания пакета, который называется «яйца».

В значительной степени прямым эквивалентом rubygem является форма ASDF defsystem, обычно помещаемая в файл <system-name>.asd («система» - это термин Lisp для обозначения того, что на других языках может называться пакетом, модулем или библиотекой - см. здесь для более подробного объяснения).

Двумя основными отличиями являются:

  • ASDF также позволяет указать, как строить (а также загружать, тестировать и т. Д.) Систему (что-то вроде make-файла) - AFAIK, такого понятия нет в rubygems или node вообще

  • В отличие от драгоценных камней или узла, ASDF не предоставляет механизма для загрузки и установки пакета. Здесь на помощь приходит quicklisp - он имеет дело с загрузкой систем ASDF. Но ql здесь не единственный путь: исторически существовали другие подходы к установке библиотек ASDF, включая ASDF-Install и clbuild, и другие могут появиться в будущем.

person Vsevolod Dyomkin    schedule 03.11.2013

Qlot

Что касается связи с ASDF и Quicklisp, другие ответы дают хороший подход.

Я хочу отметить, что теперь вы можете использовать обычную библиотеку lisp, очень похожую на указанные, которая доступна на quicklisp an is Qlot. Он используется для указания локальных зависимостей проекта. Он очень похож на bundle и gemfile в ruby.

Пакеты Quicklisp

Также введено в 2015-04-28 вы можете использовать пакеты quicklisp Пакеты библиотек Quicklisp - это автономные наборы экспортируемых систем из Quicklisp и загружается без использования Quicklisp.

person anquegi    schedule 24.11.2016

Нет однозначного эквивалента упомянутым выше. Однако комбинация ASDF + Quicklisp довольно близка.

С помощью ASDF вы определяете свои системы (модули, если хотите) - упаковываете файлы lisp согласованным образом и объявляете свои зависимости. Quicklisp - это онлайн-хранилище исходных текстов для этих систем. Когда вы загружаете систему с помощью Quicklisp, она загружает эти зависимости и загружает их за вас.

Я не уверен, есть ли такое понятие, как управление версиями ..

person mck    schedule 01.11.2013
comment
Re 'версионирование: вы можете определить версию в defsystem. Quicklisp - это не репозиторий, он загружает вещи из множества разных источников, в основном из Clicky, но есть и другие. ASD служит практически той же цели, что и setup.py (традиционный способ создания пакетов Python). - person ; 01.11.2013
comment
@wvxvw Что я имею в виду под управлением версиями, так это объявить его в вашей зависимости (например, gemfile или package.json) .. вы можете это сделать? И тогда Quicklisp загрузит нужную версию? Изменить: вы правы, что Quicklisp загружается из многих источников и не является репозиторием - обновленный ответ - person mck; 01.11.2013