Что такое Lisp-эквивалент файла требований pip, ruby gemfile, node package.json и т. Д.? Я не совсем уверен, как связаны asdf и quicklisp, если это правильные вещи для использования.
Как управлять общими зависимостями lisp?
Ответы (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")
.
Я не видел никаких признаков управления версиями.
#:
означает неорганизованные символы (не обязательно). Что касается управления версиями, в 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
, и другие могут появиться в будущем.
Qlot
Что касается связи с ASDF и Quicklisp, другие ответы дают хороший подход.
Я хочу отметить, что теперь вы можете использовать обычную библиотеку lisp, очень похожую на указанные, которая доступна на quicklisp an is Qlot. Он используется для указания локальных зависимостей проекта. Он очень похож на bundle и gemfile в ruby.
Пакеты Quicklisp
Также введено в 2015-04-28 вы можете использовать пакеты quicklisp Пакеты библиотек Quicklisp - это автономные наборы экспортируемых систем из Quicklisp и загружается без использования Quicklisp.
Нет однозначного эквивалента упомянутым выше. Однако комбинация ASDF + Quicklisp довольно близка.
С помощью ASDF вы определяете свои системы (модули, если хотите) - упаковываете файлы lisp согласованным образом и объявляете свои зависимости. Quicklisp - это онлайн-хранилище исходных текстов для этих систем. Когда вы загружаете систему с помощью Quicklisp, она загружает эти зависимости и загружает их за вас.
Я не уверен, есть ли такое понятие, как управление версиями ..
defsystem
. Quicklisp - это не репозиторий, он загружает вещи из множества разных источников, в основном из Clicky, но есть и другие. ASD служит практически той же цели, что и setup.py (традиционный способ создания пакетов Python).
- person ; 01.11.2013