JSON является подмножеством YAML, но с одним важным отличием, в нём нет конечного перевода строки (если не ошибаюсь).
Использование JSON для любой коммуникации с Javascript более православно, чем использование XML, по множеству причин (более красивый код, меньшее потребление памяти, большая производительность).
Более того, тенденция к переходу от XML к JSON существует даже в таких системах, где Javascript и не пахнет.
Круто, только надо сразу сказать, что чуть более сложный парсер на boost::spirit превращается в кашу, а его компиляция отжирает гигабайты оперативки и может выполняться минутами и десятками минут. Я уж не говорю о километровых выводов ошибок в темплейтах, если что нибудь накосячить или спирит поменяется в следующей версии. Используйте ANTLR или Bison+FLEX и ваши волосы будут мягкими и шелковистыми :)
ну я же в начале написал, чтобы не разводить холивар — каждому свое.
кому-то нравятся блондинки, другому — рыжие. кому-то большие большие груди, а кому-то сандра баллок :)
по теме: сложные парсеры может быть лучше писать на чем-то, отличном от Спирита. но мелкие — самое оно.
да, boost удобен и очень хорош. Не представляю себе жизнь на С++ без boosta. Будет возможность, попробую boost::spirit. Пока довольствовался другими библиотеками: boost::asio (кроссплатформенные сокеты), boost::thread и boost::program_options (для парсинга параметров программы) и многие другие.
Удачи :)
Пример из жизни. Проект около 600мб исходников, все id-шники хранятся в int-ах. Выводятся в лог, и при формировании запросов с в 70% случаев с помощью sprintf. Читаются хоть и редко, но с помощью sscanf.
У одних из клиентов заканчиваются айдишники. Внезапно… (с запасом пол-года)
Не буду двадаться в подробности как это всё происходило, но пара ребят героически, с помощью компилятора и регекспов отловили большинство использований айди, и поменяли их на новый тип db_id_t.
И вот случаи с sprintf и sscanf — отливливались дольше всего…
очень редко, но до сих пор qa специалисты ловят коры.
Забыл добавить. Самая большая проблема вашего scanf("%d-%d", &a, &b); — в том что при изменении типа a и b — нужно делать два изменения.
Менять тип у переменной, и менять тип во всех использованиях scanf.
Ну так граждане. Надо было изначально завести typedef. А вот с %d хз что делать. наверное только макросом. В таких случаях лучше перейти на с++ с iostream.
>> Надо было изначально завести typedef.
ага. тайпдеф был, только лет пять назад, на этом проекте еще не применялось код-ревью и в большинстве мест тайпдеф не ипользовался.
>> А вот с %d хз что делать. наверное только макросом. В таких случаях лучше перейти на с++ с iostream.
Согласен, использую stream-ы.
Я просто немного покритиковал вариант со scanf.
От обилия всяких @<":>.>>,<<&|{][ рябит в глазах. Я после третьего-четвертого такого символа в строке теряю нить повествования (как, например, после пятой-шестой вложенности цикла или массива). Вы считаете это хорошим стилем программирования? (Я не о стиле автора статьи, а о том, к чему вынуждает spirit).
Практическое использование Boost.Spirit