06 августа 2011

Quicklisp

Очень и очень удобный инструмент. Кто бы мог подумать, что я смогу за три строки установить restas. Для сравнения отсылаю к алгоритму "ручной" установки: http://restas.lisper.ru/ru/installation.html#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0. А еще разрешить  зависимости для hunchentoot.
Вообщем не могу удержаться и не перевести миниатюрное руководство по quicklisp.


Quicklisp beta


Quicklisp - менеджер библиотек для Common Lisp. Он может скачать, установить и загрузить любую из более чем 550 библиотек с помощью нескольких простых команд. Quicklisp легко устанавливается и работает с ABCL, Allegro CL, Clozure CL, CLISP, CMUCL, ECL, LispWorks, SBCL и Scieneer CL на ОС Linux, Mac OS X и Windows.

Для начала работы с Quicklisp beta, скачайте и загрузите http://beta.quicklisp.org/quicklisp.lisp.

Quicklisp предоставляется "как есть" без каких-либо гарантий. См. примечания к релизу об известных проблемах.

Для получения новостей и анонсов следите за @quicklisp в твитере или читайте Quicklisp блог. Если у вас есть вопросы или комментарии, пожалуста напишите email автору или используйте Quicklisp группу или обратитесь на канал #quicklisp на freenode. Код Quicklisp-а размещен на хостинге проектов GitHub.

Для инсталяции Quicklisp, скачайте quicklisp.lisp и загрузите его. Для запуска Quicklisp вместе с лисп-машиной возпользуйтесь функцией (ql:add-to-init-file) после инсталяции.

Ниже приводится пример установки на ОС MacOS X с SBCL. В данном примере $ обозначает командную строку ОС и * командную строку Lisp REPL-а.

$ curl -O http://beta.quicklisp.org/quicklisp.lisp
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 49843  100 49843    0     0  33639      0  0:00:01  0:00:01 --:--:-- 50397
$ sbcl --load quicklisp.lisp
This is SBCL 1.0.42.52, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.

  ==== quicklisp quickstart loaded ====

    To continue, evaluate: (quicklisp-quickstart:install)

* (quicklisp-quickstart:install)

; Fetching #<URL "http://beta.quicklisp.org/quickstart/asdf.lisp">
; 144.48KB
==================================================
147,949 bytes in 0.64 seconds (226.11KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/quickstart/quicklisp.tar">
; 160.00KB
==================================================
163,840 bytes in 0.76 seconds (211.36KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/quickstart/setup.lisp">
; 2.78KB
==================================================
2,846 bytes in 0.001 seconds (2779.30KB/sec)
Upgrading ASDF package from version 2.004 to version 2.009
; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp.txt">
; 0.40KB
==================================================
408 bytes in 0.003 seconds (132.81KB/sec)

  ==== quicklisp installed ====

    To load a system, use: (ql:quickload "system-name")

    To find systems, use: (ql:system-apropos "term")

    To load Quicklisp every time you start Lisp, use: (ql:add-to-init-file)

    For more information, see http://www.quicklisp.org/beta/

NIL
* (ql:system-apropos "vecto")

; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp/2010-10-07/systems.txt">
; 45.30KB
==================================================
46,386 bytes in 0.50 seconds (89.70KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp/2010-10-07/releases.txt">
; 83.49KB
==================================================
85,490 bytes in 0.53 seconds (157.22KB/sec)
#<SYSTEM cl-vectors / cl-vectors-20101006-git / quicklisp 2010-10-07>
#<SYSTEM lispbuilder-sdl-cl-vectors / lispbuilder-20101006-svn / quicklisp 2010-10-07>
#<SYSTEM lispbuilder-sdl-cl-vectors-examples / lispbuilder-20101006-svn / quicklisp 2010-10-07>
#<SYSTEM lispbuilder-sdl-vecto / lispbuilder-20101006-svn / quicklisp 2010-10-07>
#<SYSTEM lispbuilder-sdl-vecto-examples / lispbuilder-20101006-svn / quicklisp 2010-10-07>
#<SYSTEM static-vectors / static-vectors-20101006-git / quicklisp 2010-10-07>
#<SYSTEM vecto / vecto-1.4.3 / quicklisp 2010-10-07>
NIL
* (ql:quickload "vecto")
To load "vecto":
  Install 5 Quicklisp releases:
    cl-vectors salza2 vecto zpb-ttf zpng
; Fetching #<URL "http://beta.quicklisp.org/archive/salza2/2010-10-06/salza2-2.0.7.tgz">
; 14.84KB
==================================================
15,197 bytes in 0.12 seconds (125.77KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/zpng/2010-10-06/zpng-1.2.tgz">
; 38.59KB
==================================================
39,521 bytes in 0.37 seconds (103.47KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/zpb-ttf/2010-10-06/zpb-ttf-1.0.tgz">
; 42.59KB
==================================================
43,611 bytes in 0.39 seconds (110.33KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cl-vectors/2010-10-06/cl-vectors-20101006-git.tgz">
; 40.40KB
==================================================
41,374 bytes in 0.37 seconds (109.20KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/vecto/2010-10-06/vecto-1.4.3.tgz">
; 75.71KB
==================================================
77,526 bytes in 0.49 seconds (153.57KB/sec)
; Loading "vecto"
..................................................
[package zpb-ttf].................................
[package salza2]..................................
[package zpng]....................................
[package net.tuxee.paths].........................
[package net.tuxee.aa]............................
[package net.tuxee.aa-bin]........................
[package net.tuxee.vectors].......................
[package vecto]........
("vecto")
* (ql:add-to-init-file)
I will append the following lines to #P"/Users/quicklisp/.sbclrc":

  ;;; The following lines added by ql:add-to-init-file:
  #-quicklisp
  (let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
                                         (user-homedir-pathname))))
    (when (probe-file quicklisp-init)
      (load quicklisp-init)))

Press Enter to continue.


#P"/Users/quicklisp/.sbclrc"
* (quit)
$ 

Основные команды

Для загрузки приложений используйте:

(ql:quickload system-name)

Например:


CL-USER> (ql:quickload "vecto")
    To load "vecto":
      Install 5 Quicklisp releases:
 cl-vectors salza2 vecto zpb-ttf zpng
    loading output here

Quicklisp автоматически скачает все зависимости для выбранного пакета.

Будьте бдительными: некоторые библиотеки имеют отличающиеся имена от имен проектов. Например: для загрузки cl-yacc используйте (ql:quickload "yacc"), а не (ql:quickload "cl-yacc").

ql:quickload также может быть использован для загрузки локальных библиотек, которые не являются частью репозитария Quicklisp. Если локальная библиотека зависит от проектов доступных из репозитария Quicklisp, зависимости будут автоматически загружены.

Для поиска библотеки среди доступных используйте:

(ql:system-apropos substring)

Например:


CL-USER> (ql:system-apropos "xml")
    #<SYSTEM bknr.xml / bknr-datastore-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM cl-libxml2 / cl-libxml2-0.3.4 / quicklisp 2010-09-16>
    #<SYSTEM cl-libxml2-test / cl-libxml2-0.3.4 / quicklisp 2010-09-16>
    #<SYSTEM cxml / cxml-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM cxml-dom / cxml-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM cxml-klacks / cxml-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM cxml-rng / cxml-rng-2008-11-30 / quicklisp 2010-09-16>
    #<SYSTEM cxml-rpc / cxml-rpc-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM cxml-stp / cxml-stp-2008-11-30 / quicklisp 2010-09-16>
    #<SYSTEM cxml-stp-test / cxml-stp-2008-11-30 / quicklisp 2010-09-16>
    #<SYSTEM cxml-test / cxml-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM cxml-xml / cxml-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM pithy-xml / pithy-xml-20100916-git / quicklisp 2010-09-16>
    #<SYSTEM s-xml / s-xml-20100916-http / quicklisp 2010-09-16>
    #<SYSTEM s-xml-rpc / s-xml-rpc-20100916-http / quicklisp 2010-09-16>
    #<SYSTEM xml-render / cl-typesetting-20100916-svn / quicklisp 2010-09-16>
    #<SYSTEM xmls / xmls-1.3 / quicklisp 2010-09-16>


Имя библиотеки следует за словом "SYSTEM" и перед первым "/", например "cxml-stp".

Для загрузки Quicklisp вместе с лисп-машиной используйте:

(ql:add-to-init-file)

Quicklisp добавит код в ваш файл инициализации для лисп-машины, который загружает Quicklisp при запуске.

Для установки и конфигурации SLIME используйте:

(ql:quickload "quicklisp-slime-helper")

Затем следуйте отображаемыми указаниям. quicklisp-slime-helper создаст файл, который вы можете загрузить в Emacs, который настраивает правильный load-path для загрузки установленного SLIIME.

Для обновления установленных приложений используйте:

(ql:update-all-dists)

Для обновления клиента Quicklisp используйте:

(ql:update-client)

Лицензионная информация

Copyright © 2010 Zachary Beane 

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in
  all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.

Части Quicklisp являются производными от библиотеки Deflate Пьера Маи, которая доступна на следующих условиях:

Deflate --- RFC 1951 Deflate Decompression

  Copyright (C) 2000-2009 PMSF IT Consulting Pierre R. Mai.

  Permission is hereby granted, free of charge, to any person obtaining
  a copy of this software and associated documentation files (the
  "Software"), to deal in the Software without restriction, including
  without limitation the rights to use, copy, modify, merge, publish,
  distribute, sublicense, and/or sell copies of the Software, and to
  permit persons to whom the Software is furnished to do so, subject to
  the following conditions:

  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  OTHER DEALINGS IN THE SOFTWARE.

  Except as contained in this notice, the name of the author shall
  not be used in advertising or otherwise to promote the sale, use or
  other dealings in this Software without prior written authorization
  from the author.

Частозадаваемые вопросы для Quicklisp beta.


Чем Quicklisp отличается от adsf-install?
Quicklisp и asdf-install решают одну задачу, но Quicklisp использует другой подход:


  • Quicklisp не использует внешние приложения такие как: gpg, tar и gunzip.
  • Quicklisp хранит копии архивов проектов в центральном репозитарии (размещенном на Amazon S3 для надежности и раздаваемом с помощью Amazon CloudFront для скорости).
  • Quicklisp заранее собирает много информации о проекте. Проекты, которые не собираются или некорректно работают с другими проектами не включаются.



Как добавить проект в Quicklisp репозитарий?
Если это открытый проект достуный с помощью HTTP, CVS, git, darcs, и т.д., пожалуйста создайте запрос с информацией о том, как можно получить проект.

Вы также можете создать ваш приватный репозитарий для Quicklisp приложений (называемый dists), но эта возможность еще не документирована. FIXME

Как Quicklisp связан с ASDF?
Quicklisp имеет архив файлов проекта и метаданные о его связях. Он умеет скачивать файлы проекта и его зависимости. ASDF используется для компиляции и загрузки проекта и его зависимостей.
ASDF похож на make, а Quicklisp на менеджер пакетов Linux.

Я могу использовать прокси?
Да. После загрузки quicklisp.lisp вы можете использовать :proxy параметр функции quicklisp-quickstart:install:

(quicklisp-quickstart:install :proxy "http://myproxy.site.com:8080/")

Только HTTP (не SSL) поддерживается в данный момент. Proxy аутентификация также еще не поддерживается.

Вы можете изменить адрес прокси сервера после установки так:

(setf (ql-config:config-value "proxy-url") "http://proxy.value.here")

Значение сохраняется между сессиями Quicklisp.

Я могу инсталлировать в директорию отличную от ~/quicklisp?
Да. После загрузки quicklisp.lisp, вы можете использовать :path параметр функции quicklisp-quickstart:install:

(quicklisp-quickstart:install :path ".quicklisp/")

Вы также можете изменить Quicklisp путь после установки просто переименовав quicklisp во что-нибудь другое.

Я получил ошибку в Emacs при использовании quicklisp-slime-helper: Searching for program: no such file or directory, lisp
Эта ошибка возникает, потому что вы должны указать для SLIME какую реализацию Lisp использовать, установив соответствующее значение для inferior-lisp-program. Например, если вы используете SBCL, вы можете добавить в файл Emacs.:

(setq inferior-lisp-program "sbcl")

Значение также может быть полным путем, например /home/xach/bin/clisp.

Есть и другие способы настроить, какие CL реализации используются при запуске SLIME. Смотрите руководство SLIME для более подробной информации.

Я получил ошибку: Quicklisp has already been installed.
Данная ошибка возникает если вы загружаете quicklisp.lisp после первоначальной установки. После того как Quicklisp проинсталирован, нет необходимости загружать quicklisp.lisp. Для загрузки Quicklisp в ваш Lisp, вы можете использовать:

(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))

Для автозагрузки Quicklisp, вы можете использовать:

(ql:add-to-init-file)

Могу ли я загружать проект, который не является частью репозитария Quicklisp?
Да. Любая бибилотека, которая может быть найдена с помощью  ASDF, может быть загружена с помощью ql:quickload.

Например, если у вас имеется файл my-project.asd в директории /projects/my-project/, вы можете сделать что-то вроде этого:

(push #p"/projects/my-project/" asdf:*central-registry*)
(ql:quickload "my-project")

Если my-project зависит от бибилотек, доступных из Quicklisp но еще не установленных, они будут автоматически установлены.

Могу ли я загрузить локальную версию проекта вместо Quicklisp версии?
Да. Любая бибилотека, которая может быть найдена с помощью ASDF будет загружена вместо Quicklisp версии. См. Могу ли я загружать проект, который не является частью репозитария Quicklisp?

Вы используете несколько экземпляров инсталляций Quicklisp для нескольких реализаций Lisp?
Нет. Вы можете использовать один экземпляр Quicklisp во всех реализциях Common Lisp. Пока реализации используют один setup.lisp они используют одни и те же метаинформацию и файлы бибилотек. FASL файлы автоматически разделяются между реализациями с помощью ASDF2.

Как я могу поддержать Quicklisp?

Есть несколько способов:


Любая помощь принимается с благодарностью.

Zach Beane 2011-01-14

Комментариев нет:

Отправить комментарий