LINUX.ORG.RU

В каком формате лучше хранить конфиги?

 ,


1

2

Сижу, втупляю..
Не хочу велосипедить. Не могу решить в каком формате хранить, генерировать и парсить конфиги своего поделия.

Подробнее: Основной конфиг — иерархия, 3-4 уровня. Затем еще два вида саб-конфигов, разная структура, иерархия, 2-3 уровня.

Условия:

1) текстовый формат;
2) хуман реадабля, и чем реадаблее, тем лучше;
3) минимум зависимостей.

Варианты:

1) *.ini — хуман реадабля 146%, либ как собак нерезаных, да и вообще реализация проста, можно самому навелосипедить и обойтись вообще без зависимостей;
2) JSON — похуже первого в плане читаемости, зато структуру иначе чем написано не распарсишь, либы есть, но что-то они крупноваты по размеру, написать свою ниасилю по времени, придется зависеть от -lfoobar;
3) XML — читается лучше второго, но, зависимость, хотя, libxml уж точно будет стоять на 99% линуксомашин;
4) что-то я такое видел интересное в dovecot'е, похожее на JSON, но читаемее, что это?
5) Еще варианты?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: комментарий от Legioner

Для сложных конфигов это может быть очень полезно. Много форматов конфигов можно автодополнять без спецредакторов? Для простых, конечно, нафиг не надо.

Конечно нет. Веришь или нет, мне реально страшно представлять, нафига нужен спецредактор с автодополнением для текстового конфига.

Короче хмл для многостраничных простыней годен. А для всего остального построчные конфиги. Безо всяких дурацких скобочек, да.

anonymous
()
Ответ на: комментарий от deep-purple

Голос Леннарта есть в каждом из нас, мы смело несём слово Леннарта от своего аккаунта!

Слава системдэ, Леннарту слава! Кто не пользуется системдэ - тот хейтер-ретроград!

Harald ★★★★★
()

Если цель — минимализм, я бы выбрал *.ini (*.conf). Иерархию в них можна симулировать именованием разделов, например, через точку.

blexey ★★★★★
()

5) Еще варианты?

EDN

Hertz ★★★★★
()

JSON и XML на любителя. INI - отличный.

5) Еще варианты?

Lua:

int = 1
str = 'Привет'
str2 = "Хайнанэ"
arr = {1, 2, 3}
dict = { a = 1, b = 2, c = 3 }
-- Комментарий

section 'Название' {
-- сахар для функций с таблицами
}

section 'И так' 'Значение'
-- ... со строками

section 'Со' 'Вложенными' 'Подсекциями' {
-- даже так можно
}

lexazloy
()
Ответ на: комментарий от Chaser_Andrey

Очень даже! И либа маленькая совсем.

deep-purple ★★★★★
() автор топика

тебе? [mode провидец on]

1. (так же см. рис. 1)

qulinxao ★★☆
()

Qsettings/gsettings/gconf/dconf/windowsregistry

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Ещё sql

Кстати да. SQLite в некоторых случаях отличный вариант

anonymous
()

s-expression

anonymous
()

5) Еще варианты?

- конфиг как bash скрипт который настраивает переменные окружения и/или дёргает нужные функции.

- конфиг как чистый С. на лету через например tcc или jit компилишь и вытаскиваешь все нужные поля из структур

MKuznetsov ★★★★★
()
Ответ на: комментарий от deep-purple

А чего его кастрировать? Просто не юзай фичи, которые не нужны, типа вложенных массивов и всё. При этом он по ходу вообще обратно совместим с ini форматом и парсер должен будет не подавиться, если ему на вход ini файл скормят.

Gorthauer ★★★★★
()
Ответ на: комментарий от tailgunner

Количество любителей ini печалит.

это довольно простой и универсальный формат, который парсить можно даже на брейнфаке. что печального-то?

waker ★★★★★
()
Ответ на: комментарий от Manhunt

Ну я с позиции ехать, а не шашечек. Каюсь, у меня за все время использования ямла ни разу не возникло необходимости штудировать его спецификацию.

Deleted
()

3) XML — читается лучше второго, но, зависимость, хотя, libxml уж точно будет стоять на 99% линуксомашин;

TinyXML/TinyXML2, RapidXML - это если конфиг действительно должен читаться/редактироваться человеком и/или должен быть платформонезависимым.

Не увидел тег C. Не знаю, что принято использовать для работы с xml в си.

andreyu ★★★★★
()
Последнее исправление: andreyu (всего исправлений: 1)
Ответ на: комментарий от lexazloy

Полностью поддерживаю, особенно если что-то надо прямо в конфиге сделать - посчитать или строку для С подготовить

Интерфейс с С достаточно простой

alx777 ★★
()

Расскажу оригинальный вариант, о котором многие не задумываются, но он офигенный... текстовое представление Protobuf

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.prot...

Нет ничего бесценнее чем вместо портянки документации можно отправить пользователя почитать *.proto файл с документацией. Парсер готов, статическая типизация, списки, опциональные параметры, компактное легко читаемое представление.

vertexua ★★★★★
()
Ответ на: комментарий от RiseOfDeath

Насколько я помню, валидный YAML по определению является валидным JSON`ом (но не наоборот)

Как раз наоборот. JSON — подмножество YAML.

YAML can be considered to be a superset of JSON, providing syntax for improved human readability along with a more complete information model (supportfor additional types)[6]. JSON files are often valid YAML files because of the fact that JSON’s semantic structure is equivalent to YAML’s Пруф

ivn86
()
Ответ на: комментарий от Chaser_Andrey

Он не умеет во вложенность, иерархичность, списки, не?

это уже зависит от твоей фантазии и потребностей. ссылаться из секций на другие секции по именам, например, никто не запрещает. какое-то подобие списков тоже можно сделать нумерацией. например, формат плейлистов pls — это вполне себе ini.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от tailgunner

То, что ini - плоское вендовое говно.

фу таким быть.

waker ★★★★★
()
Ответ на: комментарий от tailgunner

А венда здесь притом, что...

anonymous
()

Буду неоригинален: LUA.

otto ★★★
()
Ответ на: комментарий от makoven

Это просто пример. При наличии таких сущностей внутри жсона, руками ты там уже ничего не сделаешь.

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от deep-purple

Ну ок, убедил. Можно и нафантазировать, что конфиг создается/меняется програмно, неизвестной либой, которая решает заменить все непечатаемые символы на escape-последовательности

makoven ★★★★★
()
Ответ на: комментарий от Manhunt

«слабее других форматов защищен от дурака»

Правильно писать «встраиваемый язык сценариев»

makoven ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.