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

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments