Apache Fory 团队很高兴地宣布 0.14.0 版本发布。这是一个主要版本,包含来自 11 位不同贡献者的 85 个 PR。请参阅安装页面了解如何获取适用于您平台的库。
亮点
- 正式支持
C++:首次发布 Apache ForyC++,具有高性能对象图序列化、跨语言互操作性和 schema 演进功能 - 行格式与类型系统:在 Java、Python 和
C++中新增面向行的格式类型系统,支持行列转换并移除 Arrow 依赖 - 性能增强:所有语言的显著优化,包括 Rust 中的线程本地上下文和
C++类型分发的快速扁平整数映射 - 生态系统更新:添加对 JDK 25(Java)、Go 1.23 和 Bazel 8 的支持。Python 正式标记为稳定版本,改进了构建并行性
- 高级 Java 特性:通过
ForyFeature支持 GraalVM Native Image,以及为阻塞队列和 final 字段优化的序列化器 - ObjectStreamSerializer 重构:重构了
ObjectStreamSerializer,采用元数据共享的兼容模式,降低空间成本并提高 JDK 自定义序列化 API 的性能
C++:首次发布亮点
这是 Apache Fory C++ 的首次发布,为现代 C++17 提供完整、高性能的序列化框架。如果您构建需要快速序列化、跨语言通信或 schema 演进的 C++ 应用程序,Fory C++ 提供了类型安全、编译时序列化,且开销最小。
关键功能:
- 通过
FORY_STRUCT宏进行结构体注册,实现编译时类型安全 - 与 Java、Python、Go、Rust 和 JavaScript 的跨语言序列化
- 前向/后向兼容的 schema 演进(兼容模式)
- 共享对象和循环引用的引用跟踪
- 线程安全和单线程(最快)变体
- 全面的类型支持:基本类型、
std::string、std::vector、std::map、std::set、std::optional、std::shared_ptr、std::unique_ptr、std::variant和时间类型 - 用于分析工作负载的零拷贝行格式,支持随机字段访问
- CMake(FetchContent)和 Bazel 构建系统支持
快速开始
#include "fory/serialization/fory.h"
using namespace fory::serialization;
struct Person {
std::string name;
int32_t age;
std::vector<std::string> hobbies;
FORY_STRUCT(Person, name, age, hobbies);
};
int main() {
auto fory = Fory::builder()
.xlang(true) // 启用跨语言模式
.track_ref(false) // 禁用引用跟踪
.build();
fory.register_struct<Person>(1);
Person person{"Alice", 30, {"reading", "coding"}};
auto bytes = fory.serialize(person).value();
Person decoded = fory.deserialize<Person>(bytes).value();
// person == decoded
return 0;
}
- 指南:
C++序列化 – fory.apache.org/docs/guide/… - 示例:hello_world、hello_row
C++ 基准测试

以下是时间结果(纳秒;越低越好),比较了 Fory 与 Protobuf 在不同数据结构上的性能。
注意:结果取决于硬件和实现版本。有关如何自行运行基准测试,请参阅 C++ 基准测试指南:github.com/apache/fory…
功能特性
- feat(python): 为 buffer 对象添加 raw 方法,作者 @chaokunyang,见 github.com/apache/fory…
- feat(rust): 添加 duration 序列化器支持,作者 @chaokunyang,见 github.com/apache/fory…
- feat(rust): 为未注册错误消息添加类型名称,作者 @chaokunyang,见 github.com/apache/fory…
- perf(rust): 支持 criterion profiler 生成火焰图,作者 @chaokunyang,见 github.com/apache/fory…
- refactor(rust): 将 fory_debug 合并到 fory 宏属性中,作者 @chaokunyang,见 github.com/apache/fory…
- feat(rust): 直接派生基本类型写入/读取,作者 @chaokunyang,见 github.com/apache/fory…
- perf(rust): 优化 buffer 写入读取性能,作者 @chaokunyang,见 github.com/apache/fory…
- feat(Rust): 支持 u128 和 u128_array,作者 @urlyy,见 github.com/apache/fory…
- feat(c++): 实现 fory cpp 对象图序列化框架,作者 @chaokunyang,见 github.com/apache/fory…
- feat(python): 纯 Python 行列转换,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 为
c++实现 xlang 序列化,作者 @chaokunyang,见 github.com/apache/fory… - feat(c++/python): 添加行格式 schema 并移除 arrow 依赖,作者 @chaokunyang,见 github.com/apache/fory…
- feat(java): 实现 fory 行格式类型系统,作者 @chaokunyang,见 github.com/apache/fory…
- feat(python): 直接实现 cython bazel 构建,无需第三方依赖,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c+/python): 升级 bazel 到 bazel8,作者 @chaokunyang,见 github.com/apache/fory…
- feat(java/python/c++): 添加 schema 编码器并移除 arrow 序列化器,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 在反序列化多态类型时检查最大动态深度,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 添加 cmake 构建支持和 cpp 示例,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 添加 cpp 基准测试,作者 @chaokunyang,见 github.com/apache/fory…
- perf(rust): 使用分段池减少 fory 池的争用,作者 @chaokunyang,见 github.com/apache/fory…
- perf(rust): 使用线程本地管理 fory rust WriteContext/ReadContext,作者 @chaokunyang,见 github.com/apache/fory…
- feat(rust): 为 rust 添加 fory 配置,作者 @chaokunyang,见 github.com/apache/fory…
- perf(c++): 优化 cpp 序列化性能,作者 @chaokunyang,见 github.com/apache/fory…
- perf(c++): 从类型信息中移除 shared_ptr 以减少原子计数器成本,作者 @chaokunyang,见 github.com/apache/fory…
- feat: 优化 python 模块检查,作者 @chaokunyang,见 github.com/apache/fory…
- feat(java): 支持 jdk 25,作者 @chaokunyang,见 github.com/apache/fory…
- feat(java): 为阻塞队列添加优化的序列化器,作者 @zhan7236,见 github.com/apache/fory…
- perf(c++): 在热路径上直接设置错误而不是 result 以减少成本,作者 @chaokunyang,见 github.com/apache/fory…
- perf(c++): 优化基本类型结构字段读取性能,作者 @chaokunyang,见 github.com/apache/fory…
- feat(java): 为带有 writeReplace/readResolve 方法的 final 字段实现 FinalFieldReplaceResolveSerializer,作者 @mchernyakov,见 github.com/apache/fory…
- perf(c++): 为
c++添加 mac profile 脚本,作者 @chaokunyang,见 github.com/apache/fory… - perf(c++): cpp 的公平基准测试,作者 @chaokunyang,见 github.com/apache/fory…
- perf(c++): 通过快速扁平整数映射优化类型分发性能,作者 @chaokunyang,见 github.com/apache/fory…
- perf(c++): 添加 media content 基准测试,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 支持多态集合元素序列化,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 添加 cpp tuple 序列化器,作者 @chaokunyang,见 github.com/apache/fory…
- refactor(xlang): 对未知类型 id 使用 0,作者 @chaokunyang,见 github.com/apache/fory…
- feat(java): 为 GraalVM Native Image 添加 ForyFeature,作者 @mengnankkkk,见 github.com/apache/fory…
- feat(c++): 支持带有多态元素的容器 xlang 序列化,作者 @chaokunyang,见 github.com/apache/fory…
- feat(python): 并行 python wheel 构建,作者 @chaokunyang,见 github.com/apache/fory…
- perf(c++): 改进数组/集合的序列化性能,作者 @LiangliangSui,见 github.com/apache/fory…
- feat(go): 升级 go 到 1.23,作者 @chaokunyang,见 github.com/apache/fory…
- perf(c++): 在上下文中集中错误状态以加快序列化速度,作者 @chaokunyang,见 github.com/apache/fory…
- refactor(go): 重新设计序列化实现,提高性能和可用性,作者 @chaokunyang,见 github.com/apache/fory…
- refactor(rust): 将 rust 类型层合并到 TypeMeta 中,作者 @chaokunyang,见 github.com/apache/fory…
- ci: 移除 Python 的 macos x86 CI,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 为 cpp 支持无符号类型,作者 @chaokunyang,见 github.com/apache/fory…
- feat(c++): 为
c++支持基于 variant 的联合类型序列化,作者 @chaokunyang,见 github.com/apache/fory… - feat(java): 重构 ObjectStreamSerializer 以使用元数据共享兼容序列化器,作者 @chaokunyang,见 github.com/apache/fory…
- feat(java): 将用户注册类型 id 与 fory 注册类型 id 分离,作者 @chaokunyang,见 github.com/apache/fory…
- feat(): 添加
c++用户指南文档,作者 @chaokunyang,见 github.com/apache/fory… - refactor(c++/rust): 优化
c++serialize_to API,作者 @chaokunyang,见 github.com/apache/fory…
Bug 修复
- fix(Rust): 修复 Binary 实现,作者 @urlyy,见 github.com/apache/fory…
- fix(rust): 修复数组字段支持,作者 @chaokunyang,见 github.com/apache/fory…
- fix(rust): 对集合的嵌套多态引发错误,作者 @chaokunyang,见 github.com/apache/fory…
- fix(kotlin): 支持带有 Java 保留字的 Kotlin 字段,作者 @chaokunyang,见 github.com/apache/fory…
- fix(java): 在行格式类型推断中处理 TypeVariable,作者 @chaokunyang,见 github.com/apache/fory…
- fix(java): 在 Python 命令中使用单引号以兼容 Windows,作者 @zhan7236,见 github.com/apache/fory…
- fix(java): 修复阻塞队列序列化器中的竞态条件,作者 @zhan7236,见 github.com/apache/fory…
- fix(cpp): 修复类型错误,作者 @LiangliangSui,见 github.com/apache/fory…
- fix(go): 修复结构体值引用跟踪 bug,作者 @chaokunyang,见 github.com/apache/fory…
- fix(java): 支持 CopyOnWriteArraySet 的序列化,作者 @LiangliangSui,见 github.com/apache/fory…
其他改进
- docs: 修复 java_serialization_guide.md 中的表格,作者 @mosinnik,见 github.com/apache/fory…
- chore(rust): 修复元组测试注释,作者 @chaokunyang,见 github.com/apache/fory…
- docs(rust): 移除共享引用的冗余文档,作者 @chaokunyang,见 github.com/apache/fory…
- chore(Java): 更新 java 快速入门文档,注意注册顺序敏感,作者 @moooonk,见 github.com/apache/fory…
- chore(CI): 在 github workflows 中为 bazel 添加缓存,作者 @prakash-218,见 github.com/apache/fory…
- chore(CI): 修复符号链接缓存,作者 @prakash-218,见 github.com/apache/fory…
- chore: 将基准测试移至单独目录以加快 ci 构建,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 修复 rust 基准测试链接,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 修复文档中的 cargo 基准测试命令,作者 @chaokunyang,见 github.com/apache/fory…
- chore: 将发布版本升至 0.13.1,作者 @chaokunyang,见 github.com/apache/fory…
- docs(java): 添加日志记录部分,作者 @mosinnik,见 github.com/apache/fory…
- chore(c++): 移除 cpp 基准测试,作者 @chaokunyang,见 github.com/apache/fory…
- chore(c++): 将 meta string 移至 meta 目录,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 移除 arrow 类型的未使用类型映射,作者 @chaokunyang,见 github.com/apache/fory…
- chore: 移除与 arrow 相关的内容,作者 @LiangliangSui,见 github.com/apache/fory…
- chore(c++): 将常用宏移至 macros.h,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 在 README.md 中更新 Bazel 版本,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 优化 xlang 规范文档,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 优化元数据打包和自动类型映射,作者 @chaokunyang,见 github.com/apache/fory…
- ci: 添加从 PR 正文中移除 HTML 注释的工作流,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 更新 xlang_serialization_spec.md,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 更新
C++基准测试用例,作者 @LiangliangSui,见 github.com/apache/fory… - chore(deps): 在 /go/fory 中将 gopkg.in/yaml.v3 从 3.0.0-20200313102051-9f266ea9e77c 升级到 3.0.1,作者 @dependabot[bot],见 github.com/apache/fory…
- chore: 将发布版本升至 0.13.2,作者 @chaokunyang,见 github.com/apache/fory…
- chore(python): 将 pyfory 标记为稳定版本,作者 @chaokunyang,见 github.com/apache/fory…
- docs(c++): 添加 cpp bazel 示例和 ci,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 重构用户指南文档,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 添加 scala 和 kotlin 文档,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 重构 xlang 文档,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 添加行格式规范,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 修复侧边栏位置,作者 @chaokunyang,见 github.com/apache/fory…
- docs: 移除复制的 rust/python 文档,作者 @chaokunyang,见 github.com/apache/fory…
新贡献者
- @mosinnik 在 github.com/apache/fory… 首次贡献
- @prakash-218 在 github.com/apache/fory… 首次贡献
- @zhan7236 在 github.com/apache/fory… 首次贡献
- @mchernyakov 在 github.com/apache/fory… 首次贡献
完整变更日志: github.com/apache/fory…