Основные задачи:
- Хранение (тут желательно иметь восможность прочитать произвольный кусок)
- Передача (компактность)
- Обработка (в основном, редактируемость)
- Эволюция и совместимость реализаций (разные люди будут писать на разных языках и разных версиях)
- Текстовые форматы
- классический Key: Value в HTTP, SMTP итд https://datatracker.ietf.org/doc/html/rfc2616#section-10.4.9
- XML etc https://developer.mozilla.org/en-US/docs/Web/XML/XML_introduction
- JSON https://www.json.org/json-en.html неоднозначности JSON: Parsing JSON is a Minefield http://seriot.ch/projects/parsing_json.html
- Ragel, генератор парсеров текстовых форматов http://www.colm.net/open-source/ragel/ Баг Cloudbleed: https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/
- Двоичные
- Protobuf набор примитивов https://developers.google.com/protocol-buffers/docs/overview#scalar сага о LEB128 https://developers.google.com/protocol-buffers/docs/encoding#structure
- Thrift
- Cap’n Proto https://capnproto.org
- FlatBuffers работа над ошибками от Google https://google.github.io/flatbuffers/flatbuffers_internals.html
- Гарри Поттер и кошмары Unicode
- карта BMP https://unicode.org/roadmaps/bmp/
- статистика по исользованию не-BMP в реале http://replicated.cc/concepts/unicode (примерно 0 до emoji, чуть больше теперь)