LINUX.ORG.RU

Ищу формат для древовидных/иерархических конфигов

 , ,


0

7

Собственно понадобились древовидных/иерархических конфиги для написания людьми. Такой себе DSL. Человек пишет декларативный конфиг - прога его обрабатывает и выдаёт результат.

Требования:

  1. Минимальное количество синтаксического шума.
  2. Коментарии.
  3. Многострочный текст.
  4. Иерархичность.
  5. Популярный формат, чтобы либа была для любого языка.

Что имеем:

  • YAML

    Самый очевидный выбор. Но провозившись с ним неделю - я возненавидел его. Он до безобразия переусложнён и не очевиден. Я до сих пор не могу предугадать как мой конфиг будет распарсен - это провал. Я даже пытался написать простенький парсер, чтобы лучше понять его. Но только больше запутался.

  • XML

    Тот случай, когда дедушка XML подходит лучше всего. Но хотелось бы что-то более простое.

  • JSON

    Не подходит по всем параметрам. Не для людей.

  • JSON5

    Ближе всего к идеалу, но малораспространён.

  • TOML

    Всем хорош, но не древовидный (да, если костыль, но это тихий ужас).

Есть идеи?

PS: шутки про s-expressions не интересны

★★★★★

Ответ на: комментарий от cdshines

xml писать руками тоже никто никогда не будет

Обоснуй потугу ©

bread
()

Я до сих пор не могу предугадать как мой конфиг будет распарсен - это провал.

Это провал тебя как инженера.

Не оправдываю ямль, он и правда переусложнён. Но он и не настолько плох, как ты написал.

Парсер ямля писать самому я бы не советовал.

AnDoR ★★★★★
()

Из новодела - глянь на jsonnet :D

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

Я хз что здесь происходит

Скрипач, ты что, дальтоник? Обычный map.

Нечетные позиции — ключи, четные — значения. Пары можно разделять запятыми во имя луны.

:a — keyword, "foo" — строка, [1 2 3] — вектор чисел (да, ключи могут быть не только строками).

four — символ (я думаю, в сериализованном представлении они тебе не понадобятся).

Прям рокет саенс, ага.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 3)
Ответ на: комментарий от RazrFalcon

Если серьезно, то я и так использую кастомный yaml-парсер, который пропускает только то, что я хочу. Но это говорит не в пользу yaml.

Значит прямо в документации пишешь: «формат основан на yaml, но упрощён во славу очевидности».

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

Фактически это будет аналог fonttools.

Ну тогда очевидно что s-exp зайдут. Тот же EDN должен быть ок для конфигов.

AnDoR ★★★★★
()
Последнее исправление: AnDoR (всего исправлений: 1)

Подскажу ещё вариант: lex/yacc. Да, просто пишем свой DSL по вкусу. (Практически весь софт в OpenBSD поступает именно так).

Ну и для совсем простых вещей (key-value с рекурсией) cgetent.

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

Хочется что-то менее окаменевшее.

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

XML-библиотеки с поддержкой XSD довольно жирные. А так самое то для кучи конфигов использовать. Проверка содержимого одним вызовом выполняется, схемы проверки декларативные.

ТС, а чем JSON + JSON Schema не угодили? Чего там не для людей?

dvetutnev
()
Ответ на: комментарий от Nervous

Там реально говно какое-то на вид :). Суперская идея — зажопить визуальный разделитель между ключом и значением. Зато запятые между парами есть. Значит, авторы еще не совсем упоротые. Сэкономили на глазах :).

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

Суперская идея — зажопить визуальный разделитель между ключом и значением. Зато запятые между парами есть

Просто запятые там трактуются как whitespace. Хошь так ставь, хошь сяк, хошь вообще не ставь. Все равно для чтения человеком нужен pretty print с отступами.

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

Так не заставляй писать руками json.

к тому же, я советовал hocon, в котором есть. просто hocon - надмножество json

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

Да ну нафиг. Экономия на спичках. В mediatomb, который весьма лёгкий, вполне удобно редактировать.

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