Вопрос новичка о Лиспе и Пакетах

Здесь вы можете перейти к нижней части истории, если вам все равно, и вы хотите увидеть только вопрос.

Так что я немного поигрался в 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.

Я собираюсь сдаться в этой точке.

Это самое худшее, что вы могли бы сделать (в этом или другом месте). Я рад, что вы решили разместить здесь свои проблемы.

  1. Как загрузить исходный код для этих пакетов в мою среду lisp. попытка изучить язык не была слишком сложной, но информация об окружающей среде была скудной. Нужно ли собирать пакеты, которые я загружаю с ASDF.

clbuild должен дать вам все, что вам нужно, но вот несколько советов, если вы не хотите его использовать:

  1. CLISP, SBCL: ASDF является частью вашего Lisp. Бежать (require :asdf), Lispworks, Allegro: вам нужно скачать и загрузить ASDF. Сохраните asdf.lisp где-нибудь и запустите (load "/path/to/asdf.lisp"),
  2. Для каждой библиотеки / приложения ("система" в ASDF) вам нужно скачать и распаковать ее в какое-то место. Повторяйте, пока все зависимости не будут удовлетворены. Запишите эти места (каталоги).
  3. Для каждого места из шага № 2 добавьте это место в реестр ASDF: (push "/path/to/dir/" asdf:*central-registry*), Не забывай косую черту.
  4. Загрузите систему, используя (asdf:oos 'asdf:load-op :system-name),
  1. Есть ли простой способ для кого-то просто встать и работать в 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 выручить при необходимости.

Другие вопросы по тегам