Cap'n 原型的可变状态
Mutable state with Cap'n proto
应该如何将 Cap'n Proto 用于应用程序的可变状态,类似于 Protobuf 的使用方式?有垃圾收集器吗?
Kenton Varda 在 his comparison of Cap'n Proto, FlatBuffers, and SBE 中确认 Cap'n Proto 在消息内部使用竞技场分配器。如果在较长时间内对其进行编辑,例如由于写入磁盘并重新加载,单个消息将无限增长。
Cap'n Proto 是否有任何垃圾收集器来重新排列消息并回收任何浪费的space?垃圾收集器会是最佳方法吗?如果没有,或者如果不存在,那么推荐的方法是什么?
实际上,我正在编写一个 Rust 程序,无论如何都必须只保存加密数据。因此,我可以重新复制整个消息结构,但我对更广泛的选项感到好奇。
回收浪费的唯一方法space 是将消息复制到新的 MessageBuilder 中。只会复制 "used" 部分。这实际上是 "GC" -- 许多最好的 GC 算法实际上移动数据,这就是您在这里所做的。
没有实用的方法来实现 arena-allocated Cap'n Proto 消息的非移动 GC。
我正在考虑扩展 C++ 中的 Cap'n Proto 代码生成器,以生成一组 类 适合于在堆上表示相同的数据结构,以便您可以随着时间的推移修改结构。当然,在堆表示和竞技场表示之间进行转换需要一个副本。但是,这还没有实施,我也没有任何时间表。 (Rust 实现可能会得到类似的更新。)
应该如何将 Cap'n Proto 用于应用程序的可变状态,类似于 Protobuf 的使用方式?有垃圾收集器吗?
Kenton Varda 在 his comparison of Cap'n Proto, FlatBuffers, and SBE 中确认 Cap'n Proto 在消息内部使用竞技场分配器。如果在较长时间内对其进行编辑,例如由于写入磁盘并重新加载,单个消息将无限增长。
Cap'n Proto 是否有任何垃圾收集器来重新排列消息并回收任何浪费的space?垃圾收集器会是最佳方法吗?如果没有,或者如果不存在,那么推荐的方法是什么?
实际上,我正在编写一个 Rust 程序,无论如何都必须只保存加密数据。因此,我可以重新复制整个消息结构,但我对更广泛的选项感到好奇。
回收浪费的唯一方法space 是将消息复制到新的 MessageBuilder 中。只会复制 "used" 部分。这实际上是 "GC" -- 许多最好的 GC 算法实际上移动数据,这就是您在这里所做的。
没有实用的方法来实现 arena-allocated Cap'n Proto 消息的非移动 GC。
我正在考虑扩展 C++ 中的 Cap'n Proto 代码生成器,以生成一组 类 适合于在堆上表示相同的数据结构,以便您可以随着时间的推移修改结构。当然,在堆表示和竞技场表示之间进行转换需要一个副本。但是,这还没有实施,我也没有任何时间表。 (Rust 实现可能会得到类似的更新。)