gpt4 book ai didi

capnproto - 在 Cap'n Proto 中使用唯一 ID 的示例

转载 作者:行者123 更新时间:2023-12-04 15:55:51 26 4
gpt4 key购买 nike

Cap'n Proto documentation包含一个关于唯一 ID 背后的基本原理的句子:

IDs exist to provide a relatively short yet unambiguous way to refer to a type or annotation from another context.



我无法找到任何此类引用的示例。有人可以指点我吗?谢谢。

最佳答案

一个例子是 Cap'n Proto 自己的 RPC 协议(protocol)。 RPC 接收器可以潜在地实现任意一组接口(interface)。因此,调用者通过发送接口(interface)的类型 ID 和方法编号来指定他们希望调用的方法。见 Call.interfaceId in rpc.capnp .

任何查看注释的内容也往往需要使用 ID,因为编译模式中的注释仅由其 ID 标识。因此,检查注释的代码需要通过 ID 来进行。例如,参见 this helper functionthis call site在 Cap'n Proto 自己的 C++ 代码生成器中,它需要遵守为文件设置 C++ 命名空间的注释。

尽管如此,一般来说,您应该警惕使用类型 ID。在协议(protocol)中使用类型 ID 有点像依赖 dynamic_cast在 C++ 中——它并不总是很糟糕,但它暗示了一个糟糕的设计,它不像它应该的那样类型安全。例如,如果您的消息可能包含 N 种不同类型中的一种,您可能会尝试将其定义为:

# BAD DESIGN
struct MyApplicationMessage {
typeId @0 :UInt64;
value @1 :AnyStruct;
}

通常,您真正想要的是 union完全包含此消息预期的类型集。如果您使用 union ,然后类型 ID 无关紧要(并且可以节省线路上的空间,因为 union 标签只有 2 个字节而不是 8 个)。

关于capnproto - 在 Cap'n Proto 中使用唯一 ID 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51727528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com