Где коД живёТ
Или немного про библиотеки к Common Lisp.
Лисп - язык с почтительной историей. Лисп активно используется университетами в обучении. И, наконец, Лисп - практический язык, на котором можно (и нужно :) писать по-разному и в различных областях. Это я к чему – раз всё так, то, наверно, должно быть много полезного кода, много библиотек и прочих ресурсов, которые могли бы помочь в решение насущных задач и спасли от “делания велосипедов” (хм, хотя это иногда и полезно). Эта небольшая статья должна помочь разобраться, где и что брать. 1)
Если говорить условно, то можно сделать такой вывод - есть четыре основных источника кода:
- Описательные ресурсы, посвященные только Лиспу.
- Ресурсы, на которых непосредственно находится Лисп-код (имплементации, библиотеки и т.д.). Это могут быть не только Лисп направленные ресурсы. Существуют также сайты, посвященные целиком одному проекту.
- Персональные сайты на которых авторы представляют свои проекты.
- Учебный код, также сайты университетов. Часто код "спрятан" где-нибудь в ftp директориях и не анонсируется на главной странице.
Теперь немного подробнее и со ссылками.
1 / Описательные ресурсы
Итак, во-первых - общие сайты, посвященные именно Лиспу, и собирающие о нём всевозможную информацию. Среди них основные следующие.
Cl-User
cl-user - что-то вроде базы данных по библиотекам, реализациям Лиспа, документации и книгам. Сейчас больше 1000 записей (из которых 600 - библиотеки), каждая в таком духе: "родной" веб-сайт проекта, авторы, дата релиза, ссылка на релиз, поддерживаемые платформы, зависимости, могут быть примеры использования, ссылки на мануалы и т.д. Есть поиск, система тэгов для ориентировки и ссылки на другие сайты. К сожалению, все ссылки представлены одним большим списком, и разобраться в них не просто, поэтому этот ресурс полезен, когда знаешь, что именно хочешь найти.
CLiki
CLiki - Вики энциклопедия о Лиспе (и сама написана на Лиспе), отличается от предыдущего ресурса, большей наглядностью, но содержит меньше ссылок на ресурсы, зато те, что есть: лучше рассмотрены. Отдельные темы раскрыты в виде статей, что позволяет иногда использовать Cliki как мини-мануал. (Cуществует ресурс wiki.alu которому почему-то "противопоставляет" себя cliki, так и пишут “Non-Free, non-Unix and non-Common Lisp resources can be found at the ALU wiki”. А вот о cl-user сказано “All the Common Lisp resources can be found at ...”, что подчеркивает - полная информация именно там)
2 / Сайты проектов
Второе – сайты проектов, именно на такие ресурсы ведут ссылки с cliki или cl-user.
Common-Lisp.net
common-lisp.net - хостинг для размещения CL проектов с CVS репозиторием. Много Лисп-кода физически тут и находится. Если кто-то захочет разместить тут свой проект ;)) , то это возможно – после личной переписки с администрацией.
Github
В системе контроля открытых проектов github есть раздел Common Lisp.
ftp.linux.org
На ftp.linux.org.uk лежат исходники (и бинарники) некоторых популярных cl проектов – cmucl, sbcl, slime. Здесь же находится код cliki вместе с другими необходимыми пакетами.
Sourceforge
Некоторые проекты живут и на sourceforge, если количественно - то несколько сот. Обычно о них можно прочитать и на CLiki.
Franz.inc
Компания franz.inc имеет некоторое количество открытого кода (по большей части для реализации Allegro) смотрите : opensource.franz.com и на github.
3 / Персональные сайты
Третий источник кода – персональные сайты разработчиков, т.е. сайты людей, которые занимаются программирование на Лиспе. Там может быть и не все о Лиспе.
Weitz.de
weitz.de - вот сайт где много практического кода. (Вообще можно сделать и такой вывод – код делится на два типа. Первый тип кода добавляет возможности, меняет синтаксис, вводит какие-то абстракции, но за рамки Лисп-мира так и не выходит. И второй тип кода - код связывающий Лисп (который упрекают, что он "вещь в себе") с реальным миром – с юникодом, с разными форматами файлов, с которыми нужно работать, с веб программированием и т.д.)
- cl-ppcre - библиотека, позволяющая использовать регулярные выражения (Perl-типа).
- hunchentoot - веб-сервер, также содержит средства для создания динамических веб-страниц.
- drakma - веб-клиент, поддерживающий различные протоколы.
- cl-unicode - библиотека для работы с юникодом.
- cl-interpol - библиотека, позволяющая использовать интерполяцию переменных в строках, т.е. замену переменных на их значения, подобно тому, как это делается в Perl.
- Также тут можно найти библиотеки для работы с HTML, парсинга XML, графические библиотеки , переносимую библиотека файловых путей (описана в PCL).
Cyrusharmon
cyrusharmon этот блог чем-то перекликается с предыдущим ресурсом - тут можно найти биндинги к hunchentoot и утилиты для FFI.
Metabang.com
metabang.com - ресурс содержит открытый код под лицензией MIT, все проекты есть также и на common-lisp.net.
- cl-graph - библиотека графических алгоритмов.
- cl-variates - генератор случайных чисел.
- cl-mathstats - математическая библиотека.
- Лисп-shell, командная лисп-оболочка.
- А также утилиты для системы ASDF.
Zach Beane
Ресурс Zach Beane содержит в основном графические библиотеки, позволяющие в CL работать с такими форматами как jpeg, gif, png, TTF и векторной графикой. Также есть библиотека для работы с форматами gzip и zlib.
tenkan.org
trivial-captcha - генератор каптчи на Лиспе. Плюсы - всего пара страниц кода, а изображения получаются загкрученные, чем-то на гугловские похожи. Минус - невысокая скорость генерации. За основы берутся буквы из pgm файла (gray map) и работа с этими файлами включена в этот код. Если пожертвовать нулевой зависимостью библиотеки и использовать png, то можно добится большего эффекта.
4 / Академический и учебный код
И четыре – Сайты университетов, и другой академический и учебный код.
Norvig.com
norvig.com, сайт Питера Норвига - ученого, автора книг по ИИ (AIMA, PAIP, у нас, между прочим, тоже по ним преподают кое-где) и директора Google. Что там есть:
- Код относящийся к книге Artificial Intelligence: A Modern Approach, а его описание здесь. Надо сказать, что это книга не о Лисп, а о ИИ, Лисп используется наряду с другими языками (Java и Python) для демонстрации некоторых идей.
- Код к книге Paradigms of AI Programming. Тут уже всё средствами Лисп: примеры AI ("говорилки" проще говоря), экспертные системы, интерпретатор пролога, примеры из теории Лиспа – интерпретация, компиляция, хвостовая рекурсия.
- Схема, написанная на Java-Script - jscheme
paulgraham.com
Код учебного и утилитного характера на сайте Пола Грэхема. Также можно взглянуть на список приложений, написанных на Лиспе.
SICP
Код к книге SICP.
cs.cmu.edu
Лисп-код на сайте университета CMU (Carnegie Mellon University). В репозитории много информации - книги, статьи, новости, даже видео. Но главное - код, отмечу:
- clmath - математическая библиотека, т.е. функции из разных разделов высшей математики.
- infix - инфиксные макросы, например читающие такой код :
(if x < y <= z then f(x) = x^^2 + y^^2 else f(x) = x^^2 - y^^2) - parcil - парсер C кода : разбор
(parcil "x = y * sin (pi / 2.7)")в итоге выполняет(setf x (* y (sin (/ pi 2.7)))) - haskell - сурьёзная релизация Haskell на Lisp :))
- Codewalk-еры
- Итераторы
(На самом деле код к SICP есть и тут... Западные университеты почему-то определяют Лисп в направление AI, пусть так, это НЕ значит что там только ИИ и нет никакого практического кода)
PowerLoom
PowerLoom