Литвек - электронная библиотека >> Nikodemus Siivola >> Lisp, Scheme и др. >> Nikodemus' Common Lisp FAQ

Nikodemus Siivola NIKODEMUS' COMMON LISP FAQ

Самое начало

Common Lisp? CL? Clisp? Lisp?

«Common Lisp» — название языка, стандартизированного ANSI.

«CL» — наиболее предпочтительное сокращение предыдущего названия.

«Clisp» не является правильным сокращением, поскольку это название одной из реализаций Common Lisp.

«Lisp» — это категория языков, к которым относится CL.

«LISP» уже не пишут лет 20, Common Lisp часто сокращают до Lisp, если ясно из контекста, о чём именно идёт речь.

И что?

Про сам язык почитать можно тут:

http://random-state.net/features-of-common-lisp.html

Как научиться Common Lisp?

1. Прочитать хорошую книгу о Common Lisp.

2. Начать его использовать.

Много людей не раз пытаются пройти по первому пути, но забывают про второй.

Ну правда, нельзя же научиться программировать на языке, не начав его использовать. И потом, без работы над достаточно крупной программой многие вещи вообще невозможно понять правильно.

Какие подводные камни обходить?

Любая хорошая книга расскажет вам об особенностях и трюках языка, но есть пара психологических и социальных моментов, на которых многие спотыкаются:

1. Изучение макросов Lisp сводит с ума.

Макросы Lisp — классная штука, но сила, которую они дают, новичков часто сбивает с толку.

Часто симптом проблемы — попытка что-то сделать без ясного понимания того, зачем это делается. Запомните, все что можно сделать с помощью макросов, можно сделать и без них.

Конечно, может получиться не так практично, но память об этом опускает с небес на землю.

Перед тем, как научиться бегать, научитесь ходить. Оно того стоит, тем более что потом можно и полететь.

2. Lisp не идеален, и это не новость.

Некоторые приходят к Lisp'у с завышенными ожиданиями и разочаровываются. Другие сравнивают Lisp с языком X и обнаруживают, что первый в чем-то проигрывает.

И те, и другие могут рассуждать правильно и иметь обоснованные претензии, но проблемы начинаются тогда, когда эти люди начинают озвучивать свои претензии где-нибудь, например на #lisp.

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

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

Это не значит, что говорить в интернете нехорошее про Lisp запрещено, но… Если вы — новичок — приходите и говорите, что все плохо, не ожидайте что к вам люди пойдут с распростертыми объятиями. Даже если вы сто раз правы.

Жалобы от старичков, к тому же сделавших немало для сообщества, имеют гораздо больший вес.

3. Опытные публичные лисперы видят много троллей.

МНОГО ТРОЛЛЕЙ! Растерянный новичок иногда выглядит как тролль, во многом потому, что большинство троллей чаще всего маскируются под новичков Lisp.

Поэтому люди могут думать что вы тролль и отвечать соответственно. Самый лучший способ избежать этого — быть вежливыми.

Если кто-то вам говорит, что вы заблуждаетесь или ошибаетесь, на минутку предположите, что он или прав, или очень похоже, что вы заблуждаетесь или ошибаетесь.

С какой книги начать?

Начните с «Practical Common Lisp» (известной также как PCL) Питера Сайбела (Peter Seibel). Это хорошая отправная точка, если вы уже владеете каким-то языком программирования. Книга доступна в электронном и печатном виде:

http://www.gigamonkeys.com/book/

Другая хорошая книга — это «Common Lisp: A Gentle Introduction to Symbolic Computation» Девида Турецкого (David Touretzky). Новичокам в программировании или тем, кому PCL показалась слишком сложной, стоит почитать эту книгу. Если вы начнете с неё, потом всё же прочитайте PCL. Хотя если вы уже прочитали PCL и всё поняли, эту можно смело пропустить. Книга доступна в электронном и печатном виде:

http://www.cs.cmu.edu/~dst/LispBook/index.html

Есть еще куча хороших книг, но указанные две — лучшие для новичков. «Land of Lisp» неплоха, но по моему скромному опыту она может сформировать неправильное представление. Если начнете с нее, все равно прочитайте PCL.

Обязательно познакомьтесь с «Hyperspec» или CLHS, электронной версией стандарта языка. Это просто ценнейший справочник:

http://www.lispworks.com/documentation/HyperSpec/index.html

Не надо сразу бросаться читать справочник. Просто знайте где он находится, здесь содержатся официальные ответы на все возможные вопросы про CL. Это идеальное место для выяснения, что делает тот или иной оператор. Кроме того, в него стоит заглядывать, чтобы узнать, реализован ли нужный вам функционал в языке.

Не пренебрегайте также документацией, поставляемой вместе с вашей реализацией. В случае SBCL, руководство находится по адресу:

http://www.sbcl.org/manual

Какую мне взять реализацию?

Зависит от того, что вам нужно, хотя если вы только начали, то это не важно. Впрочем, если вы ждете помощи от какой-то группы людей, берите реализацию, которой эта группа пользуется.

По мере обучения вы сами сможете сделать осознанный выбор. Переход между реализациями не представляет большой сложности, так что это не повод для тягостных сомнений.

Я очень неравнодушен к SBCL:

http://www.sbcl.org/

SBCL хорош тем, что он идет с открытым исходным кодом, запускается на множестве платформ (в том числе Windows), включает в себя компилятор, очень серьезно относится к совместимости со стандартом ANSI и вообще несет радость и мир во всем мире… и тут я должен упомянуть, что я один из разработчиков SBCL и моя компания Steel Bank Studio Ltd предоставляет коммерческую поддержку для него.

Если SBCL по каким-то причинам вам не подходит, могу предложить пройтись по следующим спискам:


Открытые:

• Clozure CL

• CMUCL

• Clisp

• ABCL

• ECL


Коммерческие:

• Lispworks

• Allegro CL

• Scieneer

Где библиотеки? Есть аналог CPAN или RubyGems?

На RubyGems очень похож «QuickLisp»:

http://www.quicklisp.org/

Он предоставляет массу библиотек и управляет зависимостями между ними. Это очень-очень нужный инструмент.

Наиболее близкими к CPAN являются «Cliki» и «common-lisp.net»:

http://www.cliki.net/ http://www.common-lisp.net/

… но лучше ничего и не надо, правда.

Каким IDE пользоваться?

Если вы работаете с SBCL, то пользуйтесь Emacs и Slime:

http://www.common-lisp.net/project/slime/

Даже если вы раньше не пользовались Emacs, совершите усилие над собой и используйте Slime — кривая обучения не очень крутая и все команды доступны через меню.

Можно настроить Slime с помощью Quicklisp, смотри ниже раздел