На протяжении всего описания Spirit.Karma мы постараемся полностью согласовать себя с документацией для Spirit.Qi. Причин много:
- Spirit.Karma является аналогом Spirit.Qi. Некоторые люди говорят, что это Yin Spirit.Qi's Yang. Spirit.Karma генерирует байтовые последовательности из внутренних структур данных, поскольку Spirit.Qi анализирует байтовые последовательности в эти (очень те же) внутренние структуры данных.
- Обе библиотеки имеют почти идентичную структуру, очень похожую семантику и построены с использованием одинаковых инструментов. Обе библиотеки реализуют язык, отбрасывающий специфику их домена (парсинг и генерирование) в простой интерфейс.
Зачем использовать библиотеку генераторов для такой простой вещи, как генерация выходных данных? Программисты довольно долгое время использовали форматирование printf
, std::stream
или boost::format
. Ответ - да, для простых задач форматирования вывода эти знакомые инструменты могут быть быстрым решением. Но опыт показывает: как только требования к форматированию становятся все более сложными, выходная генерация становится все более сложной с точки зрения читаемости, ремонтопригодности и гибкости кода. И последнее, но не менее важное: оказывается, что код, использующий Spirit.Karma, работает намного быстрее, чем эквивалентный код, используя любой из упомянутых выше «прямых» методов (см. здесь для некоторых чисел: Производительность численных генераторов)
Вы можете утверждать, что более сложные задачи требуют более сложных инструментов. Но это оказывается не так! Вся библиотека Spirit разработана так, чтобы быть простой в использовании и масштабируемой от тривиальных до очень сложных приложений.
С точки зрения простоты и простоты разработки в развертывании, то же самое верно для Spirit.Karma, как было описано в другом месте в этой документации для Spirit.Qi: вся библиотека состоит только из файлов заголовка, без библиотек для связывания или построения. Просто поместите распределение духа в свой путь, компиляцию и запуск. Размер кода? Очень плотный, по существу сравнимый с рукописным кодом.
Учебники Spirit.Karma построены в стиле ходьбы, начиная с элементарных вещей, растущих шаг за шагом по сложности. И еще: имейте в виду, что генерация продукции является полной противоположностью разбора. Все, что вы уже узнали о разборе с использованием Spirit.Qi применимо для генерации отформатированного вывода с использованием Spirit.Karma. Все, что вам нужно сделать, это посмотреть на Spirit.Karma как зеркальное отражение Spirit.Qi.