Protocol Buffers 3.15.0 已经发布。Protocol Buffers(protobuf)是 Google 开源的语言无关、平台无关的可扩展机制,用于序列化结构化数据。此次更新亦是其 2021 年的第一次正式版本。
部分更新内容
- 编译器
- 默认启用 proto3 的可选字段,不再需要 --experimental_allow_proto3_optional 标志
- c++
- MessageDifferencer:修复了使用多个自定义忽略时的错误
- 在 MSVC 中使用 init_seg 以更早开始初始化
- 运行时不再触发 -Wsign-compare 警告
- 修复了 -Wtautological-constant-out-of-range-compare 警告
- 即使禁用了 RTTI,DynamicCastToGenerated 也可用于 nullptr 输入
- python
- 提供了 reverse() 方法的重写版本
- 可以重写 MessageFactory.CreateProtoype 以自定义类的创建
- 修复 PyUnknownFields 内存泄漏
- 添加 macOS big sur 兼容性
- JavaScript
- 生成带有 * 类型的 getDescriptor 方法
- 对生成的消息强制执行 let/const
- js/binary/utils.js:修复 jspb.utils.joinUnsignedDecimalString 以使用负数低位和非零的高位参数工作
- PHP
- 添加 PHP 8 支持
- 取消注册 INI 条目并修复关机时的无效读取
- 修复 PhpDoc 注释,以使消息访问器包含 “| null”
- 向 PHP 编译器添加对不赞成使用的字段的支持
- Ruby
- 添加了对 Ruby 3 的支持
- 重新编写数据存储层,使其基于 upb 库 的 upb_msg 对象,有助于提高解析性能
- 完善 JRuby 支持
- 修复 Windows 上的 gRPC-Ruby 无限递归/内存不足的问题
- Java
- 通过 ByteBuffer 使用 CodedInputSteam 时避免可能的 UnsupportedOperationException
- 使 Durations.comparator() 和 Timestamps.comparator() 可序列化
- 为动态消息字段类型验证失败添加更多详细的错误信息
- 现在,Proto3 Oneof字段具有 “has” 方法来检查其是否存在于 Java
- C#
- 修复了解析跨段边界的负 Int32Value 的问题
- 更改 ByteString 以使用内存并支持无复制的不安全创建
- 通过删除 MessageAdapter 优化 MapField 序列化
- 允许使用扩展注册表解析 FileDescriptor
详细内容请查看更新公告。