Flatbuffer: совместимость времени выполнения и компилятора - PullRequest
0 голосов
/ 08 октября 2019

Совместимы ли Flatbuffers с различными версиями компилятора Flatbuffer + библиотеки времени выполнения?

Я потратил много часов на устранение неисправностей и думаю, что определил, что ответ "НЕТ", но все еще нетне нашел авторитетного ответа. Документы на это мои.

Например:

  • Создание кода (Java / Go) с использованием flatc из v1.11
  • Используйте сгенерированный код для записи и чтения в другом приложении, которое использует зависимости времени выполнения от v1.10 (чтение технически только из-за локальных модульных тестов).

Если это так, то я хотел бы получить некоторые разъяснения по поводу истории обновления компилятора / среды выполнения. Возможно, моя проблема в том, что я пишу с более высокой версией, чем то, с которой я читаю - следовательно, история обновления может заключаться в том, чтобы сначала всегда обновлять читатели, а затем свернутьОбновления писателя.

1 Ответ

0 голосов
/ 08 октября 2019

FlatBuffers (фактический двоичный файл, сериализованные буферы / файлы) имеют прямую и обратную совместимость для всех языков, платформ и версий. Таким образом, вы можете обновить код, который читает или записывает эти буферы в любом порядке, не сталкиваясь с проблемами совместимости форматов.

Однако код, сгенерированный конкретной версией flatc для определенного языка, должен быть скомпилированпротив времени выполнения точно той же версии. Сгенерированный код и среда выполнения очень тесно связаны для системы такого же низкого уровня, как FlatBuffers, поэтому невозможно обеспечить стабильность API между этими двумя версиями во всех версиях. Это чисто проблема компиляции кода, однако она не должна влиять на сериализованные данные.

Не следует отменять связь между ними. Если вы отправляете код, основанный на сгенерированном коде, вам необходимо убедиться, что проект также содержит соответствующую среду выполнения, а не полагаться на внешнюю среду выполнения, которая может уже присутствовать в пользовательской системе или как угодно.

Javaнедавно внесенные изменения, чтобы гарантировать, что люди не будут не соответствовать времени выполнения, хотя этого не было в 1.10.

...