[Devel-conf] Verborum Caterva

Mykola S. Grechukh nick.grechukh на gmail.com
Пт Апр 10 14:21:57 MSD 2009


2009/4/10 Slava Dubrovskiy <>:
> On 10.04.2009 13:03, Pavel Wolneykien wrote:
>> Stanislav Ievlev <stanislav.ievlev на gmail.com> wrote:
>>
>>
>>> А что такое caterva?
>>>
>>   Всё вместе переводится как "Словоизвержение". :)
>>
>>   Мне надо генерировать конфигурационный файл для Squid на основе
>> значений, которые пользователь ввёл через модуль Альтератора. Причём
>> сам модуль никак не сохраняет эти значения, а передаёт их метабакенду,
>> который складывает их в сторонке. Такая система возникла в виду
>> сложности корректного обновления конфигурационного файла: его проще
>> перезаписать целиком, а значит нужно где-то хранить исходные данные.
>>
>>   Исходных данных было немного, а конфигурационный файл по умолчанию из
>> пакета Squid довольно длинный: он содержит много полезных комментариев,
>> которые хочется сохранить на случай, если администратор решит поправить
>> что-то в ручную (ну не отсылать же его в этом случае к документации по
>> Squid, в самом деле?). Самый простой способ решения этой задачи
>> заключается в помещении статической части конфигурационного файла
>> непосредственно в генерирующий код. А по умолчанию у нас генератором
>> является сам бакенд. Идея раздуть бакенд на добрых 4500 строк меня,
>> честно скажу, не обрадовала (хотя вначале повеселила немного).
>>
>>   Мысль вынести генератор в отдельную программу постепенно привела к
>> мысли о создании шаблона: известно, что в тех случаях, когда статическая
>> часть существенно превышает вычислимую, пишут "программу наоборот" --
>> шаблон файла с "вкраплениями" вычислительного кода. Тут, естественно,
>> возникает проблема с выбором escape-символов, которые будут отделять код
>> от статической части. Но с ними никогда не угадаешь: какой символ лучше?
>> К тому же придётся выбирать один язык программирования. Для подстановки
>> значений в шаблон хорошо подходит Shell-scripting, но только до тех пор
>> пока не нужно что-то _действительно вычислить_. Конструкции получаются
>> _громоздкие_.
>>
>>   Размышляя обо всём этом я пришёл к выводу, что задача генерации файлов
>> может быть решена проще и элегантнее, если использовать несколько языков
>> программирования: одну часть файла генерировать на одном языке, а другую
>> часть -- на другом. Но при смешении языков проблема выбора
>> escape-символов становится практически неразрешимой. То, что для одного
>> языка служит признаком комментария, для другого может быть ключевым
>> словом! Поэтому разные фрагменты генератора следовало изолировать друг
>> от друга более надёжным способом.
>>
>>   Более радикальным уровнем разделения данных, после синтаксиса языка,
>> является разделение их на отдельные файлы: тут уж ничего так просто не
>> перепутается! К тому же очень просто становится отделить статическую
>> часть от динамической: для этого ведь существует признак исполняемого
>> файла! И поддержка меток языка интерпретатора тоже уже встроена. В общем
>> красота. Осталось только написать утилиту под управлением которой
>> кусочки файлов объединялись бы в один, и всё. Программа verborum-caterva
>> как раз и является такой утилитой.
>>
> Мне кажется это аналог xml только в виде файловой системы.
>
> А еще не понятно, что произойдет если я на прямую изменю значение в
> конфиге сквида?
> Я так понимаю что оно затрется на то что указано в этой базе?

это получился YaST? ;)


Подробная информация о списке рассылки devel-conf