Инкрементальный бинарный парсер
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 25.06.19 11:50
Оценка:
Всем привет.
Как сейчас принято писать инкрементальные бинарные парсеры/сериализаторы под устоявшийся протокол из RFC? Мой вариант, это иерархия сообщений для разбора данных, фабрика + двойная диспетчеризация для обработки сообщений и всё ручками пишется. Может есть что-то получше? Версия С++ 14/17.
Sic luceat lux!
Отредактировано 25.06.2019 14:15 Kernan . Предыдущая версия .
Re: Инкрементальный бинарный парсер
От: AndrewJD США  
Дата: 25.06.19 13:18
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Как сейчас принято писать инкрементальные бинарные парсеры с под устоявшийся протокол? Мой вариант, это иерархия сообщений для разбора данных, фабрика + двойная диспетчеризация для обработки сообщений и всё ручками. Может есть что-то получше? Версия С++ 14/17.



Обычно протокол описывается в DSL и по нему генерится код. Ничего руками не делается.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: Инкрементальный бинарный парсер
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 25.06.19 13:28
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Обычно протокол описывается в DSL и по нему генерится код. Ничего руками не делается.

Ну тутоверкил, 1.5 сообщения и 3.5 поля. В любом случае, DSL тоже на С++ по традиции? Я смотрю сейчас либу где всё декларативно написано через шаблоны, всякие эндианесы задают, размеры, констреинты.
Sic luceat lux!
Re[3]: Инкрементальный бинарный парсер
От: AndrewJD США  
Дата: 25.06.19 14:10
Оценка:
Здравствуйте, Kernan, Вы писали:

K>В любом случае, DSL тоже на С++ по традиции?

XML, json или свой язык.

K>Я смотрю сейчас либу где всё декларативно написано через шаблоны, всякие эндианесы задают, размеры, констреинты.

Посмотри на google protobuf, cap'n proto, SBE.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[4]: Инкрементальный бинарный парсер
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 25.06.19 14:16
Оценка:
Здравствуйте, AndrewJD, Вы писали:

K>>В любом случае, DSL тоже на С++ по традиции?

AJD>XML, json или свой язык.
Ясно.
K>>Я смотрю сейчас либу где всё декларативно написано через шаблоны, всякие эндианесы задают, размеры, констреинты.
AJD>Посмотри на google protobuf, cap'n proto, SBE.
Ты меня не понял. Обновил задачу в стартовом топике .
Sic luceat lux!
Re: Инкрементальный бинарный парсер
От: PM  
Дата: 25.06.19 19:22
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Как сейчас принято писать инкрементальные бинарные парсеры/сериализаторы под устоявшийся протокол из RFC? Мой вариант, это иерархия сообщений для разбора данных, фабрика + двойная диспетчеризация для обработки сообщений и всё ручками пишется. Может есть что-то получше? Версия С++ 14/17.


Я в одном проекте вместо иерархии сообщений хранил variant в очереди сообщений + visit для их диспетчеризации. Compile-time рефлексия была на boost.fusion для структур сообщений, чтобы не писать руками стерилизацию. Сейчас наверно и что-то типа https://github.com/apolukhin/magic_get можно было бы попробовать применить, пока C++23 не вышел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.