This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch release_0.14.0
in repository https://gitbox.apache.org/repos/asf/fory-site.git

commit ab3481cc16351a8a689237a6ffeaa29f92e257c5
Author: chaokunyang <[email protected]>
AuthorDate: Mon Dec 15 22:48:30 2025 +0800

    add release v0.14.0 blog
---
 blog/2025-12-15-fory_0_14_0_release.md          | 191 ++++++++++++++++++++++++
 docs/docs/introduction/benchmark.md             |   6 +
 public/benchmarks/cpp/throughput_comparison.png | Bin 0 -> 52517 bytes
 3 files changed, 197 insertions(+)

diff --git a/blog/2025-12-15-fory_0_14_0_release.md 
b/blog/2025-12-15-fory_0_14_0_release.md
new file mode 100644
index 000000000..b5fdcd9e5
--- /dev/null
+++ b/blog/2025-12-15-fory_0_14_0_release.md
@@ -0,0 +1,191 @@
+---
+slug: fory_0_14_0_release
+title: Fory v0.14.0 Released
+authors: [chaokunyang]
+tags: [fory, c++, rust, java, python]
+---
+
+The Apache Fory team is pleased to announce the 0.14.0 release. This is a 
major release that includes [85 
PR](https://github.com/apache/fory/compare/v0.13.2...v0.14.0) from 11 distinct 
contributors. See the [Install](https://fory.apache.org/docs/start/install) 
Page to learn how to get the libraries for your platform.
+
+## Highlights
+
+- **Official C++ Support**: First release of Apache Fory C++ with 
high-performance object graph serialization, cross-language interoperability, 
and schema evolution
+- **Row Format & Type System**: New row-oriented format type system across 
Java, Python, and C++, enabling row-columnar conversions and removing Arrow 
dependencies
+- **Performance Enhancements**: Significant optimizations across all 
languages, including thread-local context in Rust and fast flat-int maps for 
C++ type dispatch
+- **Ecosystem Updates**: Added support for JDK 25 (Java), Go 1.23, and Bazel 
8. Python officially marked as stable with improved build parallelism
+- **Advanced Java Features**: GraalVM Native Image support via `ForyFeature` 
and optimized serializers for blocking queues and final fields
+- **ObjectStreamSerializer Refactoring**: Refactored `ObjectStreamSerializer` 
with meta-shared compatible mode for reduced space cost and improved 
performance on JDK customized serialization APIs
+
+## C++: First Release Highlights
+
+This is the first Apache Fory C++ release, delivering a complete, 
high-performance serialization framework for modern C++17. If you build C++ 
applications requiring fast serialization, cross-language communication, or 
schema evolution, Fory C++ provides type-safe, compile-time serialization with 
minimal overhead.
+
+**Key capabilities:**
+
+- Macro-based struct registration via `FORY_STRUCT` for compile-time type 
safety
+- Cross-language serialization with Java, Python, Go, Rust, and JavaScript
+- Forward/backward compatible schema evolution (Compatible mode)
+- Reference tracking for shared objects and circular references
+- Thread-safe and single-threaded (fastest) variants
+- Comprehensive type support: primitives, `std::string`, `std::vector`, 
`std::map`, `std::set`, `std::optional`, `std::shared_ptr`, `std::unique_ptr`, 
`std::variant`, and temporal types
+- Zero-copy Row format for analytics workloads with random field access
+- CMake (FetchContent) and Bazel build system support
+
+### Quick Start
+
+```cpp
+#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)       // Enable cross-language mode
+      .track_ref(false)  // Disable ref tracking for simple types
+      .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;
+}
+```
+
+- Guide: C++ Serialization – https://fory.apache.org/docs/docs/guide/cpp/
+- Examples: 
[hello_world](https://github.com/apache/fory/tree/main/examples/cpp/hello_world),
 [hello_row](https://github.com/apache/fory/tree/main/examples/cpp/hello_row)
+
+### C++ Benchmarks
+
+<img src="/img/benchmarks/cpp/throughput_comparison.png" width="90%"/>
+
+Below are timing results (nanoseconds; lower is better) comparing Fory with 
Protobuf across different data structures.
+
+| Datatype | Operation | Fory (ns) | Protobuf (ns) | Faster |
+|----------|-----------|-----------|---------------|--------|
+| MediaContent | Serialize | 414 | 2,046 | Fory (4.9x) |
+| MediaContent | Deserialize | 1,361 | 2,890 | Fory (2.1x) |
+| Sample | Serialize | 210 | 307 | Fory (1.5x) |
+| Sample | Deserialize | 1,061 | 1,500 | Fory (1.4x) |
+| Struct | Serialize | 51 | 181 | Fory (3.5x) |
+| Struct | Deserialize | 136 | 170 | Fory (1.3x) |
+
+Note: Results depend on hardware and implementation versions. See the C++ 
benchmark guide for how to run benchmarks yourself: 
https://github.com/apache/fory/tree/main/benchmarks/cpp_benchmark
+
+## Features
+* feat(python): add raw method to buffer object by @chaokunyang in 
https://github.com/apache/fory/pull/2875
+* feat(rust): add duration serializer support by @chaokunyang in 
https://github.com/apache/fory/pull/2878
+* feat(rust): add typename to unregistered error message by @chaokunyang in 
https://github.com/apache/fory/pull/2881
+* perf(rust): support criterion profiler to generate flamegraph by 
@chaokunyang in https://github.com/apache/fory/pull/2882
+* refactor(rust): merge fory_debug into fory macro attr by @chaokunyang in 
https://github.com/apache/fory/pull/2883
+* feat(rust): direct derive primitve write/read by @chaokunyang in 
https://github.com/apache/fory/pull/2890
+* perf(rust): optimize buffer write read perf by @chaokunyang in 
https://github.com/apache/fory/pull/2892
+* feat(Rust): Support u128 & u128_array by @urlyy in 
https://github.com/apache/fory/pull/2899
+* feat(c++): implement fory cpp object graph serialization framework by 
@chaokunyang in https://github.com/apache/fory/pull/2908
+* feat(python): pure python row-columar convert by @chaokunyang in 
https://github.com/apache/fory/pull/2919
+* feat(c++):  implement xlang serialization for c++ by @chaokunyang in 
https://github.com/apache/fory/pull/2925
+* feat(c++/python): add row format schema and remove arrow dependency by 
@chaokunyang in https://github.com/apache/fory/pull/2928
+* feat(java): implement fory row format type system by @chaokunyang in 
https://github.com/apache/fory/pull/2931
+* feat(python): implement cython bazel build directly without 3rd deps by 
@chaokunyang in https://github.com/apache/fory/pull/2936
+* feat(c+/python): upgrade bazel to bazel8 by @chaokunyang in 
https://github.com/apache/fory/pull/2937
+* feat(java/python/c++): add schema encoder and remove arrow serializers by 
@chaokunyang in https://github.com/apache/fory/pull/2938
+* feat(c++): check max dyn depth when deserializing polymorphic types by 
@chaokunyang in https://github.com/apache/fory/pull/2939
+* feat(c++): add cmake build support and add cpp examples by @chaokunyang in 
https://github.com/apache/fory/pull/2942
+* feat(c++ ): add cpp benchmark by @chaokunyang in 
https://github.com/apache/fory/pull/2943
+* perf(rust): use segmented pool to reduce contention of fory pool by 
@chaokunyang in https://github.com/apache/fory/pull/2945
+* perf(rust): use thread local to manage fory rust WriteContext/ReadContext by 
@chaokunyang in https://github.com/apache/fory/pull/2946
+* feat(rust): add fory config for rust by @chaokunyang in 
https://github.com/apache/fory/pull/2947
+* perf(c++): optimize cpp serialization performance by @chaokunyang in 
https://github.com/apache/fory/pull/2944
+* perf(c++): remove shared_ptr from type info to reduce atomic counter cost by 
@chaokunyang in https://github.com/apache/fory/pull/2951
+* feat: refine python module check by @chaokunyang in 
https://github.com/apache/fory/pull/2952
+* feat(java): support jdk 25 by @chaokunyang in 
https://github.com/apache/fory/pull/2954
+* feat(java): add optimized serializers for blocking queues by @zhan7236 in 
https://github.com/apache/fory/pull/2955
+* perf(c++): directly error set instead of result to reduce cost on hotpath by 
@chaokunyang in https://github.com/apache/fory/pull/2959
+* perf(c++): optimize primitive struct fields read performance by @chaokunyang 
in https://github.com/apache/fory/pull/2960
+* feat(java): implement FinalFieldReplaceResolveSerializer for final fields 
with writeReplace/readResolve methods by @mchernyakov in 
https://github.com/apache/fory/pull/2917
+* perf(c++): add mac profile script for c++ by @chaokunyang in 
https://github.com/apache/fory/pull/2962
+* perf(c++): fair benchmark for cpp by @chaokunyang in 
https://github.com/apache/fory/pull/2963
+* perf(c++): optimize type dispatch performance by a fast flat-int map by 
@chaokunyang in https://github.com/apache/fory/pull/2966
+* perf(c++): add media content benchmark by @chaokunyang in 
https://github.com/apache/fory/pull/2968
+* feat(c++): support polymorphic collection elements serialization by 
@chaokunyang in https://github.com/apache/fory/pull/2974
+* feat(c++): add cpp tuple serializer by @chaokunyang in 
https://github.com/apache/fory/pull/2975
+* refactor(xlang): use 0 for unknow type id by @chaokunyang in 
https://github.com/apache/fory/pull/2985
+* feat(java): Add ForyFeature for GraalVM Native Image by @mengnankkkk in 
https://github.com/apache/fory/pull/2701
+* feat(c++): support container xlang serialization with polymorphic elements 
by @chaokunyang in https://github.com/apache/fory/pull/2980
+* feat(python): parallel python wheel build by @chaokunyang in 
https://github.com/apache/fory/pull/2989
+* perf(c++): improve the serialization performance of array/collection by 
@LiangliangSui in https://github.com/apache/fory/pull/2986
+* feat(go): upgrade go to to 1.23 by @chaokunyang in 
https://github.com/apache/fory/pull/2995
+* perf(c++): centralize error state in context for faster serialization by 
@chaokunyang in https://github.com/apache/fory/pull/3009
+* refactor(go): redesign serialization implementation with performance and 
usability improvements by @chaokunyang in 
https://github.com/apache/fory/pull/2998
+* refactor(rust): merge rust type layer into TypeMeta by @chaokunyang in 
https://github.com/apache/fory/pull/3019
+* ci: remove macos x86 CI for Python by @chaokunyang in 
https://github.com/apache/fory/pull/3023
+* feat(c++): support unsigned type for cpp by @chaokunyang in 
https://github.com/apache/fory/pull/3022
+* feat(c++): support variant-based union type serialization for c++ by 
@chaokunyang in https://github.com/apache/fory/pull/3032
+* feat(java): refactor ObjectStreamSerializer to use meta shared compatible 
serializer by @chaokunyang in https://github.com/apache/fory/pull/3034
+* feat(java): separate user register type id with fory registered type id by 
@chaokunyang in https://github.com/apache/fory/pull/3035
+* feat(): add c++ user guide doc by @chaokunyang in 
https://github.com/apache/fory/pull/3037
+* refactor(c++/rust): refine c++ serialize_to API by @chaokunyang in 
https://github.com/apache/fory/pull/3045
+
+
+## Bug Fix
+* fix(Rust): fix Binary implementation by @urlyy in 
https://github.com/apache/fory/pull/2902
+* fix(rust): fix array field support by @chaokunyang in 
https://github.com/apache/fory/pull/2933
+* fix(rust): raise error for nested polymorphics for collection by 
@chaokunyang in https://github.com/apache/fory/pull/2934
+* fix(kotlin): support Kotlin field with Java reserved world by @chaokunyang 
in https://github.com/apache/fory/pull/2948
+* fix(java): handle TypeVariable in row format type inference by @chaokunyang 
in https://github.com/apache/fory/pull/2949
+* fix(java): use single quotes in Python command for Windows compatibility by 
@zhan7236 in https://github.com/apache/fory/pull/2953
+* fix(java): fix race condition in blocking queue serializers by @zhan7236 in 
https://github.com/apache/fory/pull/2956
+* fix(cpp): fix the type error by @LiangliangSui in 
https://github.com/apache/fory/pull/2961
+* fix(go): fix struct value reference tracking bug by @chaokunyang in 
https://github.com/apache/fory/pull/2991
+* fix(java): support serialization of CopyOnWriteArraySet by @LiangliangSui in 
https://github.com/apache/fory/pull/2999
+
+## Other Improvements
+* docs: fix broken table in in java_serialization_guide.md by @mosinnik in 
https://github.com/apache/fory/pull/2876
+* chore(rust): fix tuple test comment by @chaokunyang in 
https://github.com/apache/fory/pull/2877
+* docs(rust): remove redundant doc for shared reference by @chaokunyang in 
https://github.com/apache/fory/pull/2879
+* chore(Java): Update java quickstart doc, for note register order-sensitive 
by @moooonk in https://github.com/apache/fory/pull/2837
+* chore(CI): Add caching for bazel in github workflows by @prakash-218 in 
https://github.com/apache/fory/pull/2888
+* chore(CI): Fix cache with symlinks by @prakash-218 in 
https://github.com/apache/fory/pull/2893
+* chore: move benchmarks to separate dir to speed up ci build by @chaokunyang 
in https://github.com/apache/fory/pull/2894
+* docs: fix rust benchmark links by @chaokunyang in 
https://github.com/apache/fory/pull/2896
+* docs: fix cargo benchmark comand in doc by @chaokunyang in 
https://github.com/apache/fory/pull/2897
+* chore: bump release version to 0.13.1 by @chaokunyang in 
https://github.com/apache/fory/pull/2901
+* docs(java): add logging section by @mosinnik in 
https://github.com/apache/fory/pull/2905
+* chore(c++): remove cpp benchmarks by @chaokunyang in 
https://github.com/apache/fory/pull/2926
+* chore(c++): move meta string to meta dir by @chaokunyang in 
https://github.com/apache/fory/pull/2940
+* docs: remove unused type mappings for arrow types by @chaokunyang in 
https://github.com/apache/fory/pull/2964
+* chore: Remove the content related to arrow. by @LiangliangSui in 
https://github.com/apache/fory/pull/2965
+* chore(c++): move common macro into macros.h by @chaokunyang in 
https://github.com/apache/fory/pull/2970
+* docs: Update Bazel version in README.md by @chaokunyang in 
https://github.com/apache/fory/pull/2971
+* docs: refine xlang spec documentation by @chaokunyang in 
https://github.com/apache/fory/pull/2979
+* docs: Refine metadata packing and automatic type mapping by @chaokunyang in 
https://github.com/apache/fory/pull/2984
+* ci: add workflow to remove HTML comments from PR body by @chaokunyang in 
https://github.com/apache/fory/pull/2983
+* docs: Update xlang_serialization_spec.md by @chaokunyang in 
https://github.com/apache/fory/pull/2987
+* docs: update the C++ benchmark case by @LiangliangSui in 
https://github.com/apache/fory/pull/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 
https://github.com/apache/fory/pull/2996
+* chore: bump release version to 0.13.2 by @chaokunyang in 
https://github.com/apache/fory/pull/2997
+* chore(python): mark pyfory as stable by @chaokunyang in 
https://github.com/apache/fory/pull/3001
+* docs(c++): add cpp bazel example and add ci by @chaokunyang in 
https://github.com/apache/fory/pull/3033
+* docs: refactor user guide docs by @chaokunyang in 
https://github.com/apache/fory/pull/3036
+* docs: add scala and kotlin docs by @chaokunyang in 
https://github.com/apache/fory/pull/3040
+* docs: refactor xlang docs by @chaokunyang in 
https://github.com/apache/fory/pull/3041
+* docs: add row format spec by @chaokunyang in 
https://github.com/apache/fory/pull/3042
+* docs: fix sidebar position by @chaokunyang in 
https://github.com/apache/fory/pull/3043
+* docs: remove copy rust/python docs by @chaokunyang in 
https://github.com/apache/fory/pull/3044
+
+## New Contributors
+* @mosinnik made their first contribution in 
https://github.com/apache/fory/pull/2876
+* @prakash-218 made their first contribution in 
https://github.com/apache/fory/pull/2888
+* @zhan7236 made their first contribution in 
https://github.com/apache/fory/pull/2953
+* @mchernyakov made their first contribution in 
https://github.com/apache/fory/pull/2917
+
+
+**Full Changelog**: https://github.com/apache/fory/compare/v0.13.2...v0.14.0
\ No newline at end of file
diff --git a/docs/docs/introduction/benchmark.md 
b/docs/docs/introduction/benchmark.md
index 540e8e0b0..a9913d83b 100644
--- a/docs/docs/introduction/benchmark.md
+++ b/docs/docs/introduction/benchmark.md
@@ -47,6 +47,12 @@ Fory Rust demonstrates competitive performance compared to 
other Rust serializat
 
 Note: Results depend on hardware, dataset, and implementation versions. See 
the Rust guide for how to run benchmarks yourself: 
https://github.com/apache/fory/blob/main/benchmarks/rust_benchmark/README.md
 
+## C++ Benchmark
+
+Fory C++ demonstrates competitive performance compared to Protobuf C++ 
serialization framework.
+
+<img src="public/benchmarks/cpp/throughput_comparison.png" width="90%"/>
+
 ## JavaScript Benchmark
 
 <img width="33%" alt="" src="/img/benchmarks/javascript/complex_object.jpg" />
diff --git a/public/benchmarks/cpp/throughput_comparison.png 
b/public/benchmarks/cpp/throughput_comparison.png
new file mode 100644
index 000000000..7e1e81ccd
Binary files /dev/null and b/public/benchmarks/cpp/throughput_comparison.png 
differ


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to