Вопрос новичка о Лиспе и Пакетах
Здесь вы можете перейти к нижней части истории, если вам все равно, и вы хотите увидеть только вопрос.
Так что я немного поигрался в LISP. Некоторые основные функции, некоторые классы и файловый ввод-вывод. Когда я наткнулся на эту статью:
http://www.adampetersen.se/articles/lispweb.htm
И я взволнован, чтобы попытаться использовать lisp для веб-приложения. Я иду и скачиваю пакеты, но на всю жизнь не знаю, как загрузить их в мою Allegro IDE.
Хм... ладно, сайт hunchentoot говорит, что многие базовые пакеты находятся в LispWorks. Так что я скачиваю это. Все еще не уверен, как получить исходный код для пакетов, которые я скачал в эти IDE. Кажется, они имеют двоичные пакеты?
Да ладно, может быть, я переключусь на мой сервер Ubuntu и получу apt-get все пакеты и установочный слизь (я не использовал его раньше, потому что просто хотел выучить lisp. Изучение одновременно emacs и lisp показалось мне настоящим). Я получаю все необходимые пакеты и загружаю слизь, и опять та же проблема, которой нет.
Я копаюсь еще немного и вижу эту программу под названием ASDF. Похоже, ASDF - это какой-то компоновщик пакетов для lisp? Я не знаю, это кажется странным. Я собираюсь сдаться в этой точке.
Если вы все еще читаете это, вот мой вопрос.
1. Как загрузить исходный код для этих пакетов в мою среду lisp. попытка изучить язык не была слишком сложной, но информация об окружающей среде была скудной. Нужно ли собирать пакеты, которые я загружаю с ASDF.
2. Есть ли простой способ для кого-то просто начать работать в lisp, не затрачивая много времени на изучение всех инструментов?
4 ответа
Хм... ладно, сайт hunchentoot говорит, что многие базовые пакеты находятся в LispWorks. Так что я скачиваю это.
Это просто означает, что автор написал много кода для Lispworks в Hunchentoot. Это не значит, что Hunchentoot работает только на Lispworks.
Все еще не уверен, как получить исходный код для пакетов, которые я скачал в эти IDE.
Вам нужно использовать ASDF.
Кажется, они имеют двоичные пакеты?
Это маловероятно.
Ну да ладно, может быть, я переключусь на мой сервер Ubuntu и получу apt-get все пакеты и установочный slime > (я раньше этим не пользовался, потому что просто хотел выучить lisp. Изучение одновременно emacs и lisp показалось мне настоящим).
Тогда не делай этого. Вам не нужно использовать Emacs или Slime.
Я получаю все необходимые пакеты и загружаю слизь, и опять та же проблема, которой нет.
Для быстрых результатов попробуйте clbuild: http://common-lisp.net/project/clbuild/
Я копаюсь еще немного и вижу эту программу под названием ASDF. Похоже, ASDF - это какой-то компоновщик пакетов для lisp? Я не знаю, это кажется странным.
ASDF немного похож на Makefile для приложений Common Lisp.
Я собираюсь сдаться в этой точке.
Это самое худшее, что вы могли бы сделать (в этом или другом месте). Я рад, что вы решили разместить здесь свои проблемы.
- Как загрузить исходный код для этих пакетов в мою среду lisp. попытка изучить язык не была слишком сложной, но информация об окружающей среде была скудной. Нужно ли собирать пакеты, которые я загружаю с ASDF.
clbuild должен дать вам все, что вам нужно, но вот несколько советов, если вы не хотите его использовать:
- CLISP, SBCL: ASDF является частью вашего Lisp. Бежать
(require :asdf)
, Lispworks, Allegro: вам нужно скачать и загрузить ASDF. Сохраните asdf.lisp где-нибудь и запустите(load "/path/to/asdf.lisp")
, - Для каждой библиотеки / приложения ("система" в ASDF) вам нужно скачать и распаковать ее в какое-то место. Повторяйте, пока все зависимости не будут удовлетворены. Запишите эти места (каталоги).
- Для каждого места из шага № 2 добавьте это место в реестр ASDF:
(push "/path/to/dir/" asdf:*central-registry*)
, Не забывай косую черту. - Загрузите систему, используя
(asdf:oos 'asdf:load-op :system-name)
,
- Есть ли простой способ для кого-то просто встать и работать в lisp, не тратя много времени на изучение всех инструментов?
Смотрите выше - используйте clbuild.
Самый быстрый способ в Ubuntu - использовать пакеты, включенные в этот дистрибутив. Это нормально, если вы просто хотите попробовать что-то, но эти версии часто сравнительно старые. Я бы порекомендовал пакеты sbcl
а также slime
, Если вы еще не знаете emacs, вы можете быстро освоить его с помощью встроенного учебника (C-h t
(нажмите Control-h, отпустите, затем нажмите t)).
Затем вы можете запустить Emacs, запустить слизь (через M-x slime
), откройте файл LISP (C-x C-f ~/lisp/first-try.lisp
), и вы готовы к работе. Как учебник для Lisp, я думаю, что Practical Common Lisp - очень хорошая книга, и она доступна бесплатно.
Теперь, когда вы полюбите Lisp, вам могут потребоваться более свежие пакеты. Я бы рекомендовал использовать для этого clbuild (см. Ссылку для получения дополнительной информации, включая FAQ). Затем вы также можете создать новый sbcl (загруженный версией дистрибутива).
Кстати, ASDF - это всего лишь средство определения системы. Он не знает, как загружать пакеты, он только знает, как загрузить системы в работающий образ Lisp. Другими словами, он просто решает проблему автоматической загрузки нескольких файлов, из которых состоит некоторая "система" (библиотека), в правильном порядке. Новейшие версии позволяют загружать пакет (после его установки, например, через clbuild) простым
(asdf:load-sys 'foo)
Более старые версии показывают внутреннюю концепцию ASDF:
(asdf:operate 'asdf:load-op 'foo)
Выше load-sys
является сокращением для этого общего случая использования. Дополнительную информацию (можно сказать, все, что вам нужно о ней знать) можно найти в руководстве ASDF Getting Started. ASDF также включен в SBCL.
Когда вы загружаете исходный файл, он автоматически компилируется .fasl
файлы (быстрая загрузка)), чтобы в следующий раз загрузка происходила намного быстрее.
Вероятно, один из самых быстрых способов начать работу - это использовать Lisp in a Box (или дополнительный, как LispBox). Это полные наборы всего, что вам нужно.
Вы также можете попробовать Lisp Resource Kit, который является загрузочным CDROM с инструментами и документацией Lisp, которые все уже созданы для вас. Просто вставьте его в привод CDROM и загрузитесь!
Все эти ответы хороши, однако они стали немного устаревшими с новой популярностью Quicklisp. Говоря очень свободно, quicklisp - менеджер пакетов для asdf. После установки Quicklisp в системе вы можете использовать (ql:quickload "name of lisp library")
загрузить эту библиотеку в вашу среду lisp, включая загрузку ее и любых ее зависимостей при необходимости. Например, чтобы загрузить, установить и загрузить Hunchentoot и все его зависимости, используйте (ql:quickload "hunchentoot")
, В последующих сеансах LISP, звоня (ql:quickload "hunchentoot")
снова просто загрузит уже загруженную и установленную версию, сделав ql:quickload
простой способ загрузить любую библиотеку, доступную локально или удаленно. Чтобы установить Quicklisp, я отсылаю вас к http://www.quicklisp.org/.
Более подробное объяснение
Lisp работает немного иначе, чем другие языки, когда дело доходит до библиотек. Первое, что нужно знать, это то, что сам язык практически не предоставляет библиотечных функций - он имеет load
(который просматривает и запускает каждую строку в файле, как если бы вы печатали их в REPL) и compile-file
(который создает файл "быстрой загрузки", предварительно скомпилированную версию файла, которая load
и может выполнять гораздо быстрее). Используя только то, что обеспечивает основной язык, чтобы загрузить библиотеку, вы должны перейти к каждому из ее файлов и load
это (или (load (compile-file "filename"))
это, для лучшей скорости загрузки / производительности). Это стало утомительным, поэтому были созданы различные библиотеки для управления загрузкой библиотек, и на данный момент asdf
является королем (настолько, что многие реализации lisp фактически связывают его). В терминологии asdf библиотеки называются "системами", а файлы.asdf описывают все метаданные, связанные с их загрузкой - системы, от которых они зависят, и в основном порядок загрузки файлов, но они все еще могут быть довольно сложными. Quicklisp, тогда, сидит на вершине asdf. По сути, когда asdf обнаруживает, что не может найти систему, Quicklisp входит и проверяет, доступна ли эта система в одном из онлайн-хранилищ Quicklisp, и, если это так, загружает ее и продолжает работать с asdf. ql:quickload
в основном это просто оболочка вокруг механизма asdf для загрузки системы, которая позволяет quicklisp выручить при необходимости.