Подтвердить что ты не робот

Плюсы и минусы для разных форматов конфигурации?

Я видел людей, использующих *.cfg(Python Buildout), *.xml(Gnome), *.json(расширение Chrome), *.yaml(Google App Engine), *.ini и даже *.py для файлы конфигурации приложения (например, Django).

Мой вопрос: почему существует так много разных форматов конфигурационных файлов? Я вижу преимущество от подхода xml vs json (гораздо менее подробного) или Python (иногда у вас есть приложение Python и вы не хотите использовать конкретный модуль для разбора файла конфигурации), но как насчет другого подходы?

Я знаю, что есть еще больше форматов, чем те конфигурационные файлы, которые я привел в пример. Каковы их преимущества по сравнению друг с другом? Исторические причины? Совместимость с различными системами?

Если вы запустили приложение для чтения каких-либо файлов конфигурации (с помощью экосистемы плагина), какой из них вы бы использовали?

Какие из них, которые я привел в качестве примера, являются самыми старыми? Вы знаете историю?

4b9b3361

Ответ 1

В основном это личные предпочтения, цели и доступные библиотеки. Лично я думаю, что xml слишком много для конфигурационных файлов, но он популярен и имеет большие библиотеки.

.cfg,.ini - это устаревшие форматы, которые хорошо работают, и на многих языках есть библиотека, которая их читает. Я использовал его в Java, Python, С++ без проблем. Это не работает как формат обмена данными, и, если я передаю данные, я, вероятно, буду использовать тот же формат для конфигурации и обмена данными.

yaml и json находятся между xml и cfg/ini. Вы можете определить многие структуры данных в обоих, или это может быть просто ключ-значение, как с cfg. Оба этих формата имеют большие библиотеки в python, и я предполагаю, что на многих других языках есть библиотеки. Я считаю, что json является подмножеством yaml.

Я никогда не использовал файл python как config, но он, похоже, хорошо работает для django. Это позволяет вам иметь некоторый код в конфигурации, который может быть полезен.

В последний раз я выбирал формат, который я выбрал yaml. Он прост, но имеет некоторые приятные функции, и библиотека python была проста в установке и действительно хороша. Json был вторым, и после того, как библиотека yaml разобрала json, я выбрал yaml над ним.

Ответ 2

Заметьте, это чисто мнение и спекуляция с моей стороны, но я подозреваю, что единственная самая большая причина для множества форматов, вероятно, связана с отсутствием легкодоступной, вездесущей библиотеки анализа синтаксиса конфигурации. Не имея этого, большинство программ должны писать свои собственные синтаксические анализаторы, поэтому часто приходилось балансировать между тем, насколько сложна структура конфигурации (иерархическая или плоская, чисто данные и встроенная логика, например, инструкции if и т.д.), Сколько усилий разработчики были готовы потратить на написание анализатора конфигурационного файла и насколько боль он должен быть для конечного пользователя. Однако, вероятно, все причины, по которым вы перечислили и могли подумать, вероятно, были мотивацией для проекта или двух при выборе их формата.

Для моих собственных проектов я обычно использую .ini просто потому, что в Python уже есть отличный парсер, и это было "достаточно хорошо" для большинства моих случаев использования. В нескольких случаях это было недостаточно, я использовал файл конфигурации на основе XML, опять же, относительную простоту реализации.