生产中的 Protobufs - 在生产中包含编译器不是很繁重吗?

Protobufs in Production - Isn't it heavy to include the compiler in production?

我没有广泛使用 Protobufs,但最近被要求使用。

安装 Protobuf 编译器对本地安装来说非常繁重。我应该使用 Protobuf 在服务器上序列化和反序列化消息。 Flask 为简单起见。

这是否意味着在服务器上我也必须安装这个 Protobuf 编译器?

好像很重吧?当我只想序列化和反序列化消息时?

In passing, I heard that I don't need to include the compiler in production... But how would that work?

通常,protobuf 的工作原理是有一个构建时步骤,该步骤解析 .proto 模式文件(通常 "protoc"),该文件以您选择的语言生成代码。然后你用你的应用程序编译它,它是执行实际工作的生成代码。 DSL parser/generator 不会出现在您的应用程序中,您不需要包含它们。实际的运行时代码是...只是常规代码。

一些 protobuf 工具使用的另一个选项是元编程,其中模型(生成或手动编码)包含足够的信息来推断序列化应该如何发生,但没有生成实际的序列化代码。在这种情况下,通常会根据模型在运行时发出策略——通常是第一次需要它,然后积极地重复使用。这种方法确实需要一些运行时元素(策略发射器)。

还可以通过各种方式在运行时调用完整的 DSL 解析器。实际上,解析器并不是一个庞大的软件,只要您不是在每次调用时都使用它,通常应该没问题。