• Формат конфигурационных файлов, максимально удобных для редактирования?

    @cebka Автор вопроса
    В общем, я попытался рассмотреть разные варианты, и больше всего мне импонирует json-совместимый формат с рядом послаблений и расширений. Основная «фишка» формата — возможность тем же парсером разбирать json и модифицированный формат (и точно также выполнять дамп объекта в разные форматы).

    1) Воспринимать файл, как описание объекта, что избавляет нас от {} верхнего уровня.
    2) Ключи объекта не требуют обрамления кавычками, кроме того, вместо ':' допустимо применять '=', а если значение является объектом или массивом, вообще не требовать наличия сепаратора. То есть, допустимые варианты такие:

    "key": value
    
    key = value
    key = { .. }
    key {}
    key []
    

    3) Запятые, разделяющие значения могут быть опущены или заменены на символы ';' символ перевода строки воспринимать как окончание значения (если он не экранирован обратным слешем), то есть, допустимо:

    key1 = value,
    key2 = value;
    key3 = {}
    key4 = "some long" \
    "string"
    


    4) Комментарии: однострочные (// и #) и многострочные (/* */), для многострочных обязательна поддержка вложенности, так как это частое действие для конфигурационного файла — комментировать вложенными блоками.

    5) Макросы: начинаются с '.' и могут содержать много строк, заключенных символами {}. Приложения могут регистрировать в парсере свои макросы, расширяя функционал. Встроенные функции парсера — .include и .includes. Первый просто включает другой кусок конфигурации из файла или по HTTP, а второй дополнительно проверяет цифровую подпись.

    Если формат получится удобным для работы, то можно будет оформить парсер как отдельную библиотеку.
    Ответ написан
    Комментировать
  • Формат конфигурационных файлов, максимально удобных для редактирования?

    @cebka Автор вопроса
    Конфиг для системы фильтрации спама. Конфигурация для rmilter'а, который используется для подключения к MTA как раз секциями:
    bitbucket.org/vstakhov/rmilter/wiki/Documentation

    Сама же система активно использует lua, но я представил себе конфиг на lua и решил, что это слишком для рядового админа. xml, yaml, json — примерно из той же серии: слишком сложно для редактирования неподготовленным человеком. Я считаю, что заставлять админа учить язык программирования или же мучиться с json/xml — фашизм, хотя yaml тоже совершенно неочевиден для рядового админа. Другое дело, конфигурация секциями, привычная по nginx, dovecot, bind итп. Единственный вопрос в выразительности.
    Ответ написан
    Комментировать