Highlights
- Official C++ Support: Introduced the official Apache Fory C++ implementation, featuring a high-performance object graph serialization framework, xlang support, and comprehensive benchmarks.
- Row Format & Type System: Implemented a new row-oriented format type system across Java, Python, and C++, enabling row-columnar conversions and removing external Arrow dependencies for schema encoding.
- Performance Enhancements: Significant optimizations across all languages, including thread-local context management in Rust, fast flat-int maps for C++ type dispatch, and optimized buffer read/write operations.
- Ecosystem Updates: Added support for JDK 25 (Java), Go 1.23, and Bazel 8. Python support has been officially marked as stable with improved build parallelism.
- Advanced Java Features: Added GraalVM Native Image support via
ForyFeatureand new optimized serializers for blocking queues and final fields.
Features
- feat(python): add raw method to buffer object by @chaokunyang in #2875
- feat(rust): add duration serializer support by @chaokunyang in #2878
- feat(rust): add typename to unregistered error message by @chaokunyang in #2881
- perf(rust): support criterion profiler to generate flamegraph by @chaokunyang in #2882
- refactor(rust): merge fory_debug into fory macro attr by @chaokunyang in #2883
- feat(rust): direct derive primitve write/read by @chaokunyang in #2890
- perf(rust): optimize buffer write read perf by @chaokunyang in #2892
- feat(Rust): Support u128 & u128_array by @urlyy in #2899
- feat(c++): implement fory cpp object graph serialization framework by @chaokunyang in #2908
- feat(python): pure python row-columar convert by @chaokunyang in #2919
- feat(c++): implement xlang serialization for c++ by @chaokunyang in #2925
- feat(c++/python): add row format schema and remove arrow dependency by @chaokunyang in #2928
- feat(java): implement fory row format type system by @chaokunyang in #2931
- feat(python): implement cython bazel build directly without 3rd deps by @chaokunyang in #2936
- feat(c+/python): upgrade bazel to bazel8 by @chaokunyang in #2937
- feat(java/python/c++): add schema encoder and remove arrow serializers by @chaokunyang in #2938
- feat(c++): check max dyn depth when deserializing polymorphic types by @chaokunyang in #2939
- feat(c++): add cmake build support and add cpp examples by @chaokunyang in #2942
- feat(c++ ): add cpp benchmark by @chaokunyang in #2943
- perf(rust): use segmented pool to reduce contention of fory pool by @chaokunyang in #2945
- perf(rust): use thread local to manage fory rust WriteContext/ReadContext by @chaokunyang in #2946
- feat(rust): add fory config for rust by @chaokunyang in #2947
- perf(c++): optimize cpp serialization performance by @chaokunyang in #2944
- perf(c++): remove shared_ptr from type info to reduce atomic counter cost by @chaokunyang in #2951
- feat: refine python module check by @chaokunyang in #2952
- feat(java): support jdk 25 by @chaokunyang in #2954
- feat(java): add optimized serializers for blocking queues by @zhan7236 in #2955
- perf(c++): directly error set instead of result to reduce cost on hotpath by @chaokunyang in #2959
- perf(c++): optimize primitive struct fields read performance by @chaokunyang in #2960
- feat(java): implement FinalFieldReplaceResolveSerializer for final fields with writeReplace/readResolve methods by @mchernyakov in #2917
- perf(c++): add mac profile script for c++ by @chaokunyang in #2962
- perf(c++): fair benchmark for cpp by @chaokunyang in #2963
- perf(c++): optimize type dispatch performance by a fast flat-int map by @chaokunyang in #2966
- perf(c++): add media content benchmark by @chaokunyang in #2968
- feat(c++): support polymorphic collection elements serialization by @chaokunyang in #2974
- feat(c++): add cpp tuple serializer by @chaokunyang in #2975
- refactor(xlang): use 0 for unknow type id by @chaokunyang in #2985
- feat(java): Add ForyFeature for GraalVM Native Image by @mengnankkkk in #2701
- feat(c++): support container xlang serialization with polymorphic elements by @chaokunyang in #2980
- feat(python): parallel python wheel build by @chaokunyang in #2989
- perf(c++): improve the serialization performance of array/collection by @LiangliangSui in #2986
- feat(go): upgrade go to to 1.23 by @chaokunyang in #2995
- perf(c++): centralize error state in context for faster serialization by @chaokunyang in #3009
- refactor(go): redesign serialization implementation with performance and usability improvements by @chaokunyang in #2998
- refactor(rust): merge rust type layer into TypeMeta by @chaokunyang in #3019
- ci: remove macos x86 CI for Python by @chaokunyang in #3023
- feat(c++): support unsigned type for cpp by @chaokunyang in #3022
- feat(c++): support variant-based union type serialization for c++ by @chaokunyang in #3032
- feat(java): refactor ObjectStreamSerializer to use meta shared compatible serializer by @chaokunyang in #3034
- feat(java): separate user register type id with fory registered type id by @chaokunyang in #3035
- feat(): add c++ user guide doc by @chaokunyang in #3037
- refactor(c++/rust): refine c++ serialize_to API by @chaokunyang in #3045
Bug Fix
- fix(Rust): fix Binary implementation by @urlyy in #2902
- fix(rust): fix array field support by @chaokunyang in #2933
- fix(rust): raise error for nested polymorphics for collection by @chaokunyang in #2934
- fix(kotlin): support Kotlin field with Java reserved world by @chaokunyang in #2948
- fix(java): handle TypeVariable in row format type inference by @chaokunyang in #2949
- fix(java): use single quotes in Python command for Windows compatibility by @zhan7236 in #2953
- fix(java): fix race condition in blocking queue serializers by @zhan7236 in #2956
- fix(cpp): fix the type error by @LiangliangSui in #2961
- fix(go): fix struct value reference tracking bug by @chaokunyang in #2991
- fix(java): support serialization of CopyOnWriteArraySet by @LiangliangSui in #2999
Other Improvements
- docs: fix broken table in in java_serialization_guide.md by @mosinnik in #2876
- chore(rust): fix tuple test comment by @chaokunyang in #2877
- docs(rust): remove redundant doc for shared reference by @chaokunyang in #2879
- chore(Java): Update java quickstart doc, for note register order-sensitive by @moooonk in #2837
- chore(CI): Add caching for bazel in github workflows by @prakash-218 in #2888
- chore(CI): Fix cache with symlinks by @prakash-218 in #2893
- chore: move benchmarks to separate dir to speed up ci build by @chaokunyang in #2894
- docs: fix rust benchmark links by @chaokunyang in #2896
- docs: fix cargo benchmark comand in doc by @chaokunyang in #2897
- chore: bump release version to 0.13.1 by @chaokunyang in #2901
- docs(java): add logging section by @mosinnik in #2905
- chore(c++): remove cpp benchmarks by @chaokunyang in #2926
- chore(c++): move meta string to meta dir by @chaokunyang in #2940
- docs: remove unused type mappings for arrow types by @chaokunyang in #2964
- chore: Remove the content related to arrow. by @LiangliangSui in #2965
- chore(c++): move common macro into macros.h by @chaokunyang in #2970
- docs: Update Bazel version in README.md by @chaokunyang in #2971
- docs: refine xlang spec documentation by @chaokunyang in #2979
- docs: Refine metadata packing and automatic type mapping by @chaokunyang in #2984
- ci: add workflow to remove HTML comments from PR body by @chaokunyang in #2983
- docs: Update xlang_serialization_spec.md by @chaokunyang in #2987
- docs: update the C++ benchmark case by @LiangliangSui in #2988
- chore(deps): bump gopkg.in/yaml.v3 from 3.0.0-20200313102051-9f266ea9e77c to 3.0.1 in /go/fory by @dependabot[bot] in #2996
- chore: bump release version to 0.13.2 by @chaokunyang in #2997
- chore(python): mark pyfory as stable by @chaokunyang in #3001
- docs(c++): add cpp bazel example and add ci by @chaokunyang in #3033
- docs: refactor user guide docs by @chaokunyang in #3036
- docs: add scala and kotlin docs by @chaokunyang in #3040
- docs: refactor xlang docs by @chaokunyang in #3041
- docs: add row format spec by @chaokunyang in #3042
- docs: fix sidebar position by @chaokunyang in #3043
- docs: remove copy rust/python docs by @chaokunyang in #3044
New Contributors
- @mosinnik made their first contribution in #2876
- @prakash-218 made their first contribution in #2888
- @zhan7236 made their first contribution in #2953
- @mchernyakov made their first contribution in #2917
Full Changelog: v0.13.2...v0.14.0-rc1