linkfly (linkfly) wrote,
linkfly
linkfly

Устройство ASDF. Предисловие.

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

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

    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

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

    http://common-lisp.net/project/asdf/asdf.html

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

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

Продолжение: вторая статья цикла.

---------------------
Ссылки:

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

    http://common-lisp.net/project/asdf/

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

    http://www.cliki.net/asdf

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

    git clone git://common-lisp.net/projects/asdf/asdf.git

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

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

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

    https://launchpad.net/asdf
------------------------------------------------
Tags: asdf, lisp, programming, лисп, программирование
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

  • 3 comments