>> protobuf и другие не подошли
На этом моменте уже по-подробнее нужно, пожалуйста. Если мне не подходит protobuf
и другие — тут уже не инструмент искать, а плакать...
>> библиотеку-рантайм языка
Т.е. первый шаг == интеграционные проблемы
>> за 15 минут
В идеальном мире. В реальном же откинут твою библиотеку по причинам: не нашли в гугле, джун, которому поручили эту ерунду, запутался в readme, Буст уже и так подключен, регулярки для парсинга бинарных данных всё ещё интуитивнее кому-то. Как продвигать?
>> И библиотека сделает всё сама
Т.е. либо неэффективно, либо совершенно нет точек кастомизации
>> написать 10 строк описания
Предварительно изучив тысячи строк readme
>> просто поменять его описание
Кто ответственный, когда мы в коде сделаем hard reset на несколько коммитов назад и у нас структура изменится на предыдущий вариант, а мы уже в прод залили?
>> соблюдать несколько правил обратной совместимости
Т.е. ручное версионирование? А чем... лучше?
Где есть возможность хранить массивы значений произвольной битности? Например, есть временной ряд с миллионом целочисленных значений параметра в интервале от 0 до 15, для хранения одного значения достаточно 4 бит. В protobuf нет, в flatbuffers тоже, а мне такое нужно было недавно на работе, чтобы уменьшить объём данных, передаваемых через Интернет. А ещё нужно было паковать вместе несколько разных параметров разной битности и слать с самолёта по спутниковой связи, где один килобайт стоит больше доллара.
Если бы у меня была реализация моего языка, я бы это сделал за 15 минут. А так пришлось пилить свой протокол с ручной упаковкой бит и дебажить всё это неделями. Потом протокол менялся и приходилось дебажить снова.
Никаких интеграционных проблем. При наличии биндинга пишешь две строчки на хостовом языке программирования, и в твоя структура автоматически сериализуется и десериализуется в твой формат.
Если твоя структура данных в программе совпадает с той, которая в файле, файл просто замапится в память или скопируется через memcpy. Будет не медленнее, чем flatbuffers. Если структура не совпадает, то всё автоматически сконвертится и это будет не медленнее, чем код, который делает это вручную.
Не будет в ReadMe тысячи строк. Будет онлайн редактор, в котором можно написать описание формата и проверить прямо в браузере, а потом вставить себе готовое решение. А писать можно, взяв за основу примеры. Специально делаю синтаксис с минимальным количеством правил без подводных камней и синтаксического сахара.
С откатом кода назад проблем быть не должно. Если в новой версии кастомного формата появились новые поля, старая версия программы всё равно сможет прочитать этот файл, проигнорировав эти новые поля. Если изменить тип существующего поля, например
@int16 на
@int32 или наоборот, библиотека сама всё сконвертит. Если каких-то старых полей не хватает, то да, она их не увидит. Но в новом формате можно это предусмотреть и прописать константу, алиас или формулу для вычисления старых полей через новые. То есть при желании можно создавать версии формата, совместимые в обе стороны. И не нужно никаких ручных номеров версий в заголовке файла - с моим языком такой подход уйдёт в прошлое.