Flatbuffer:运行时和编译器的兼容性

Flatbuffer: Compatibility of runtime and compiler

Flatbuffers 是否兼容不同版本的 Flatbuffer 编译器 + 运行时库?

我花了很多时间解决这个问题,我认为我已经确定答案是 "NO",但仍然没有找到权威的答案。文档对此一无所知。

例如:

如果是这种情况,那么我很乐意对 compiler/runtime 升级故事进行一些澄清。也许我的问题是我的版本比我的版本高 - 因此,升级故事可能是始终先升级读取器,然后推出写入器升级。

FlatBuffers(实际的二进制序列化缓冲区/文件)在设计上是向前和向后兼容所有语言、平台和版本的。因此,您可以升级以任何顺序读取或写入这些缓冲区的代码,而不会 运行 出现格式兼容性问题。

然而,由特定版本的 flatc 为特定语言生成的代码必须针对完全相同版本的运行时进行编译。生成的代码和运行时与 FlatBuffers 这样的低级系统紧密相关,因此无法确保两者之间的 API 在所有版本中保持稳定。这纯粹是一个代码编译问题,但是,不应影响序列化数据。

你不应该将两者分离。如果您发布的代码依赖于生成的代码,则需要确保项目也包含匹配的运行时,而不是依赖于可能已经存在于用户系统或其他系统上的外部运行时。

Java 最近进行了更改以确保人们不会出现运行时不匹配的情况,尽管 1.10 中不存在这种情况。