C++Microsoft开源跨平台的排化库——Bond

上个月Microsoft开源了Bond,一个跨平台的模式化数据处理框架。Bond支持跨语言的序列化/反序列化,支持有力的泛型机制能对数码进行中用地处理。该框架在Microsoft公司里的高扩展服务受到得了大面积的行使。目前该品种早就冲宽松的MIT许可开源在了GitHub落得,当前本支持C++、C#与Python,可运行于Linux、OS-X和Windows平台上。Bond的编译器毕是应用Haskell编写的。

Bond与另外序列化系统所有众多相似性,例如Google Protocol
Buffers、Thrift以及Avro:

  • Bond使用IDL风格的言语定义消息 
  • 她会拿所有的Bond数据类型映射到当地语言数据类型

不过Bond的实现有一个杀挺之不同:它并无硬编码类型映射。用户会以插件的方法定制中心架构逻辑之外的始末——是由Bond模式要打从定义之项目序列化、有线格式是啊、是否将从今定义元数据放到有效载荷着等等。例如,在C++中默认是std::vector这样的STL容器,但是用户会充分容易地映射自定义之品种——在一个扭转的C++结构体中行使Python的boost::multi索引容器或者在一个生成的C++类中将一个unit64模式域映射为一个System.DateTime域。Bond生成的C++结构体还能利用由定义之分配器。

Stack
Overflow上的一个帖子本着Bond和Google
Protocol Buffers做了一个很好的于:

优点:

  • Bond支持泛型 
  • Bond有两样之类型用于表示集合:vector, map, list 
  • Bond支持项目安全的惰性反序列化(bonded) 
  • Bond支持多格式(快速二进制、紧凑二进制、XML和JSON)以及封送与转码

缺点:

  • Bond不支持不同类别的定势、可更换整数编码。在Bond中整数如何编码是出于输出格式(快速二前行制还是困难凑二进制)决定的,但是于Protocol
    BuffersC++中整数类型始终有稳定的轻重:fixed32跟fixed64。
  • Bond不支持union类型 (Protocol Buffers支持)
  • Bond并没有Java实现

另外,在这个Reddit的公告面临发生不少及Bond的贯彻同力息息相关的答案。

设想到如今正产生更多的人口以微服务的形式利用SOA,数据编组/解组的问题易得越来越重要。对于已有些序列化系统而言,Bond可以改为一个怪实用之候选方案。