Иван Смирнов - YsonStruct: дешевая сериализация иерархических JSON-структур
ฝัง
- เผยแพร่เมื่อ 16 ต.ค. 2024
- Подробнее о конференции C++ Russia: jrg.su/W8skjE
- Для описания настроек сервисов часто используются конфигурационные файлы в форматах наподобие JSON и YAML. В разных высокоуровневых языках есть возможность автоматически преобразовывать JSON в нативные структуры языка: marshalling в Go, модули JSON и YAML в Python.
Яндекс представляет библиотеку, позволяющую реализовать сериализуемые в JSON структуры на C++. Важное отличие от аналогов - это поддержка сложных иерархий классов, в том числе со множественным и виртуальным наследованием: в сложных системах конфиги неизбежно обрастают десятками и сотнями опций, и развесистая иерархия становится неизбежной.
В своем выступлении Иван рассказал про:
- высокоуровневый дизайн библиотеки;
- технические трудности в реализации (поведение виртуальных методов, линковка шаблонных классов и т. д.);
- опыт внедрения библиотеки в большую кодовую базу;
- попытки сделать хороший интерфейс.
Что есть в докладе: погружение в детали layout-а классов в различных иерархиях наследования, специфика работы с offset-ами полей, подходы к реализации рефлексии.
Чего нет в докладе: парсинга JSON и сериализации примитивных типов - эта задача хорошо выполняется и сторонними библиотеками.
Доклад будет интересен практикам, которые ищут способы удобной конфигурации сервисов, и language lawyers, желающим познакомиться с подводными камнями в укладке классов, dynamic cast и множественного наследования.
Используемые технологии: C++17 и произвольный сторонний JSON-парсер.
Скачать презентацию с сайта С++ Russia - jrg.su/pxidlK
Спасибо за доклад, есть интересные моменты, ребята прям запотели. В этом докладе конечно же "весь С++", то что в других языках не вызывает проблем или вопросов, в С++ решается костылём на костыле с UB, которые потом не понятно как поддерживать, прям классика ).