协议缓冲区是否可用于F#?

Dmi*_*ruk 3 f# protocol-buffers

只是好奇 - 协议缓冲区可用于F#吗?有任何警告等?

Jon*_*rop 9

我只是想自己回答这个问题.

Marc Gravell的protobuf-net项目与F#开箱即用,因为它使用标准的.NET习惯用法.您可以使用属性来获取序列化,而无需编写.proto文件或进行任何两阶段编译,或者您可以从标准.proto文件生成必要的代码.性能对.NET来说很好,但比OCaml的内置Marshal模块更慢.但是,此库会强制您使每个消息类型中的每个字段都可变.这确实适得其反,因为消息应该是不可变的.此外,文档还有很多不足之处,但是,这是免费软件.

我还没有成功地让Jon Skeet的protobuf-csharp端口库工作.

理想情况下,您可以将所有内置的F#类型(元组,记录,联合,列表,集合,映射......)序列化为现成的这种线路格式,但不是现有的开源解决方案能够做到这一点.我也担心这些解决方案的复杂性:Jon Skeet是88,000行C#代码和注释(!).

顺便说一句,我很失望地看到Google协议缓冲区没有指定标准格式DateTimedecimal数字.

我还没有看过Proto#,甚至找不到Froto的下载.还有ProtoParser,但它只解析.proto文件,实际上无法序列化任何东西.

  • 我认为,通过更新,CLIMutable使用protobuf-net使事情变得更容易,但仍然没有使用F#内置类型(如列表)进行播放(开箱即用).Froto看起来很活跃但需要两个阶段. (2认同)