а
Если бы у меня была реализация моего языка, я бы это сделал за 15 минут. А так пришлось пилить свой протокол с ручной упаковкой бит и дебажить всё это неделями. Потом протокол менялся и приходилось дебажить снова.
Никаких интеграционных проблем. При наличии биндинга пишешь две строчки на хостовом языке программирования, и в твоя структура автоматически сериализуется и десериализуется в твой формат.
Если твоя структура данных в программе совпадает с той, которая в файле, файл просто замапится в память или скопируется через memcpy. Будет не медленнее, чем flatbuffers. Если структура не совпадает, то всё автоматически сконвертится и это будет не медленнее, чем код, который делает это вручную.
Не будет в ReadMe тысячи строк. Будет онлайн редактор, в котором можно написать описание формата и проверить прямо в браузере, а потом вставить себе готовое решение. А писать можно, взяв за основу примеры. Специально делаю синтаксис с минимальным количеством правил без подводных камней и синтаксического сахара.
С откатом кода назад проблем быть не должно. Если в новой версии кастомного формата появились новые поля, старая версия программы всё равно сможет прочитать этот файл, проигнорировав эти новые поля. Если изменить тип существующего поля, например @int16 на @int32 или наоборот, библиотека сама всё сконвертит. Если каких-то старых полей не хватает, то да, она их не увидит. Но в новом формате можно это предусмотреть и прописать константу, алиас или формулу для вычисления старых полей через новые. То есть при желании можно создавать версии формата, совместимые в обе стороны. И не нужно никаких ручных номеров версий в заголовке файла - с моим языком такой подход уйдёт в прошлое.