В программировании на мэйнстримных языках бытует такое мнение, что система не должна быть чрезмерно гибкой. К такой точке зрения вполне можно отнестись с пониманием - ведь "гибкость" даётся не просто так, система становится сложнее, а значит больше риск внесения ошибок и соответственно это требует больше ресурсов для поддержки, Конечно, этот тезис следует иметь в виду при работе с любыми технологиями программирования. А вот в мире Лиспа дело обстоит несколько иначе: та гибкость которая обычно считается чрезмерной, здесь таковой не является, а недостаточная гибкость, считается скорее моветоном. Почему так? Да просто средства обеспечения гибкости в Лиспе достаточно просты, отлично гармонизируют с другими механизмами языка и друг другом (чего стоят одни только макросы). То есть, использования этих средств не является долгим/трудоёмким процессом (понятное дело, если не доводить это до абсурда). Дело в фундаментальной основе самого языка: минималистичный синтаксис, гомоиконность (программы представляются также как и данные), представление программ и данных в древовидной форме (в виде иерархических списков, в виде графов … называйте как хотите). Ну а дальше уже из этого следуют/вытекают макросы, лёгкость построение "Embedded DSL" (встроеных языков предметной области) и прочее-прочее … . Но довольно лирики, в этой статье мы поговорим об инструменте определения систем (если по проще, то: о средстве работы с библиотеками) - ASDF (Another System Definition Facility - другое средство определения систем), а точнее о элементах его внутреннего устройства и его некоторых качествах, обеспечивающих высокую гибкость.

Это первая статья из планируемого цикла статей по внутреннему устройству ASDF. Она предназначена для знакомых с языком Common Lisp, любителей "полазить" по чужим исходным кодам и интересующихся внутренним устройством ASDF. Следует иметь в виду, что это не какое-либо подробное объяснение всех нюансов внутреннего устройства, но и не концептуальное его изложение, а лишь некий путеводитель для изучение исходного кода. В этом цикле будет рассматриваться последняя на момент написания цикла development версия, хотя практически вся информация будет долгое время актуальна и для последующих версий. Если вам нужно лишь общее представление об устройстве ASDF и рекомендации к использованию, а технические подробности внутреннего устройства вас мало интересуют, я рекомендую прочитать эти статьи:

<source> http://lisp-univ-etc.blogspot.com/2010/06/asdf-2.html http://lisp-univ-etc.blogspot.com/2010/07/asdf.html http://lisp-univ-etc.blogspot.com/2010/08/asdf.html </source>

Также они рекомендуются, если вы только начинаете знакомиться с библиотекой ASDF. И конечно же не стоит забывать об официальном руководстве:

<source> http://common-lisp.net/project/asdf/asdf.html </source>

Крайне рекомендуется подходить к изучения цикла статей с экспериментальной точки зрения:

  1. Узнать где у вас лежит исходник asdf.lisp (желательно чтобы он был такой же версии как будет указано в каждой из статей, на момент написания этих строк, это версия 2.019.2), хотя небольшие различия в минорной версии не должны усложнить понимание материала). Или скачать его, если ASDF не входит в штатную поставку с вашей лисп-системой.
  2. В процессе изучения статей, непосредственно анализировать место в исходном коде о котором идёт речь.
  3. Интенсивно использовать отладочные инструменты вашей лисп-системы и IDE - такие формы как (step …), (trace …), (break …) и Slime debugger, в случае использования SLIME.

    Спасибо за внимание. Надеюсь этот цикл статей для кого-то будет интересен. А кому не понравится, воспринимайте это просто как "фан-арт":)

Домашняя страничка проекта:

<source> http://common-lisp.net/project/asdf/ </source>

Страничка посвященная ASDF на cliki'ах (там же можно найти ссылки на короткие "туториалы")

<source> http://www.cliki.net/asdf </source>

Получить самую свежую, разрабатываемую git-версию можно выполнив:

<source> git clone git://common-lisp.net/projects/asdf/asdf.git </source>

Также можно воспользоваться веб-интерфейсом к git-репозитарию:

<source> http://common-lisp.net/gitweb?p=projects/asdf/asdf.git </source>

Узнать текущее состояние дел разработки проекта можно по ссылке:

<source> https://launchpad.net/asdf </source>