This is an automated email from the ASF dual-hosted git repository. chaokunyang pushed a commit to branch release-0.16.0 in repository https://gitbox.apache.org/repos/asf/fory-site.git
commit 624a31f0c420e333d60c75cdd7136a075f4ee212 Author: chaokunyang <[email protected]> AuthorDate: Tue Mar 17 20:04:02 2026 +0800 update docs --- blog/2026-03-17-fory_0_16_0_release.md | 293 +++++++++++++++++++++ docs/guide/cpp/index.md | 8 +- docs/guide/java/compression.md | 2 +- docs/guide/kotlin/index.md | 4 +- docs/guide/scala/index.md | 2 +- docs/guide/xlang/getting-started.md | 4 +- docs/introduction/benchmark.md | 30 +++ docs/start/install.md | 16 +- .../2026-03-17-fory_0_16_0_release.md | 287 ++++++++++++++++++++ .../version-0.16/introduction/benchmark.md | 30 +++ src/pages/download/index.md | 14 +- .../csharp_benchmark_combined.png | Bin 0 -> 77537 bytes .../fory_0_16_0_release/go_benchmark_combined.png | Bin 0 -> 193421 bytes .../swift_benchmark_combined.png | Bin 0 -> 84759 bytes versioned_docs/version-0.16/guide/cpp/index.md | 8 +- .../version-0.16/guide/java/compression.md | 2 +- versioned_docs/version-0.16/guide/kotlin/index.md | 4 +- versioned_docs/version-0.16/guide/scala/index.md | 2 +- .../version-0.16/guide/xlang/getting-started.md | 4 +- .../version-0.16/introduction/benchmark.md | 30 +++ versioned_docs/version-0.16/start/install.md | 16 +- 21 files changed, 713 insertions(+), 43 deletions(-) diff --git a/blog/2026-03-17-fory_0_16_0_release.md b/blog/2026-03-17-fory_0_16_0_release.md new file mode 100644 index 0000000000..9938d14e9b --- /dev/null +++ b/blog/2026-03-17-fory_0_16_0_release.md @@ -0,0 +1,293 @@ +--- +slug: fory_0_16_0_release +title: Fory v0.16.0 Released +authors: [chaokunyang] +tags: [fory, c#, swift, c++, java, python, compiler] +--- + +The Apache Fory team is pleased to announce the 0.16.0 release. This is a major release that includes [144 PR](https://github.com/apache/fory/compare/v0.14.1...v0.15.0) from 17 distinct contributors. See the [Install](https://fory.apache.org/docs/start/install) Page to learn how to get the libraries for your platform. + +## Highlights + +* feat(c#): c# serialization implementation by @chaokunyang in https://github.com/apache/fory/pull/3383 +* feat(c#): add csharp target and idl integration tests by @chaokunyang in https://github.com/apache/fory/pull/3406 +* feat(swift): implement fory serialization for swift language by @chaokunyang in https://github.com/apache/fory/pull/3359 +* feat(swift): fory swift schema idl codegen by @chaokunyang in https://github.com/apache/fory/pull/3433 +* feat(JavaScript): Support EXT,NAMED_EXT by @theweipeng in https://github.com/apache/fory/pull/3312 +* feat(JavaScript): align xlang protocol by @theweipeng in https://github.com/apache/fory/pull/3316 +* refactor(python): unify read/write api for python xlang and native mode by @chaokunyang in https://github.com/apache/fory/pull/3348 +* feat(c++/python): support stream deserialization for c++ and python by @chaokunyang in https://github.com/apache/fory/pull/3307 +* feat(python): fast cython struct serializer by @chaokunyang in https://github.com/apache/fory/pull/3443 +* refactor(java): unify serializer write/read APIs and remove xwrite/xread by @chaokunyang in https://github.com/apache/fory/pull/3400 + +## C\# Serialization: First Release + +Apache Fory 0.16.0 is the first release with official C# serialization support. +The C# runtime targets modern .NET workloads and brings the same object graph, +cross-language, and schema-evolution model available in other Fory runtimes. + +**Key capabilities:** + +* High-performance binary serialization for .NET 8+ with source-generator-based serializers for `[ForyObject]` types +* Cross-language mode with Java, Python, C++, Go, Rust, and JavaScript +* Optional reference tracking for shared and circular object graphs +* Compatible mode for schema evolution +* Dynamic object payloads, custom serializers, and namespace/name registration APIs +* `ThreadSafeFory` wrapper for concurrent service workloads +* C# target support in the Fory IDL/compiler workflow + +### Quick Start + +```csharp +using Apache.Fory; + +[ForyObject] +public sealed class User +{ + public long Id { get; set; } + public string Name { get; set; } = string.Empty; + public string? Email { get; set; } +} + +Fory fory = Fory.Builder() + .Xlang(true) + .Compatible(true) + .Build(); +fory.Register<User>(1); + +byte[] payload = fory.Serialize(new User +{ + Id = 1, + Name = "Alice", + Email = "[email protected]", +}); +User decoded = fory.Deserialize<User>(payload); +``` + +* C# guide: https://fory.apache.org/docs/guide/csharp/ +* Compiler docs: https://fory.apache.org/docs/compiler/ + +### C# Benchmarks + +<img src="/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png" width="90%"/> + +Below are timing results (ns/op; lower is better) comparing Fory with Protobuf +and Msgpack across representative data structures. + +| Data Type | Operation | Fory | Protobuf | Msgpack | +| ---------------- | ----------- | ------ | -------- | ------- | +| Struct | Serialize | 39.2 | 121.5 | 66.0 | +| Struct | Deserialize | 58.3 | 180.1 | 102.6 | +| Sample | Serialize | 269.2 | 562.6 | 339.6 | +| Sample | Deserialize | 175.6 | 1084.9 | 531.8 | +| MediaContent | Serialize | 306.3 | 434.7 | 351.5 | +| MediaContent | Deserialize | 379.4 | 718.8 | 676.9 | +| StructList | Serialize | 136.1 | 468.5 | 266.9 | +| StructList | Deserialize | 221.1 | 687.0 | 488.5 | +| SampleList | Serialize | 1198.9 | 2811.9 | 1635.7 | +| SampleList | Deserialize | 791.5 | 5174.5 | 2629.2 | +| MediaContentList | Serialize | 1393.9 | 2199.4 | 1710.9 | +| MediaContentList | Deserialize | 1719.5 | 3373.1 | 3401.2 | + +Serialized data sizes (bytes): + +| Data Type | Fory | Protobuf | Msgpack | +| ---------------- | ---- | -------- | ------- | +| Struct | 58 | 61 | 55 | +| Sample | 446 | 460 | 562 | +| MediaContent | 365 | 307 | 479 | +| StructList | 184 | 315 | 284 | +| SampleList | 1980 | 2315 | 2819 | +| MediaContentList | 1535 | 1550 | 2404 | + +Benchmark details: https://fory.apache.org/docs/benchmarks/csharp/ + +## Swift Serialization: First Release + +Apache Fory 0.16.0 is also the first release with official Swift serialization +support. The Swift implementation focuses on idiomatic API design, macro-based +model serialization, cross-language compatibility, and strong support for object +graph workloads. + +**Key capabilities:** + +* High-performance serialization for Swift value and reference types +* `@ForyObject` macro for zero-boilerplate model serialization +* Cross-language protocol compatibility with Java, Python, C++, Go, Rust, and JavaScript +* Compatible mode for schema evolution across versions +* Dynamic value support for `Any`, `AnyObject`, `any Serializer`, and `AnyHashable` +* Reference tracking for shared/circular graphs, including weak references on classes +* Swift target support in the Fory IDL/compiler workflow + +### Quick Start + +```swift +import Fory + +@ForyObject +struct User: Equatable { + var name: String = "" + var age: Int32 = 0 +} + +let fory = Fory(xlang: true, trackRef: false, compatible: true) +fory.register(User.self, id: 1) + +let input = User(name: "Alice", age: 30) +let data = try fory.serialize(input) +let output: User = try fory.deserialize(data) +``` + +* Swift guide: https://fory.apache.org/docs/guide/swift/ +* Compiler docs: https://fory.apache.org/docs/compiler/ + +### Swift Benchmarks + +<img src="/img/blog/fory_0_16_0_release/swift_benchmark_combined.png" width="90%"/> + +Below are throughput results (ops/sec; higher is better) comparing Fory with +Protobuf and Msgpack across representative data structures. + +| Data Type | Operation | Fory | Protobuf | Msgpack | Fastest | +| ---------------- | ----------- | ---------- | --------- | ------- | ------------ | +| Struct | Serialize | 9,727,950 | 6,572,406 | 141,248 | fory (1.48x) | +| Struct | Deserialize | 11,889,570 | 8,584,510 | 99,792 | fory (1.39x) | +| Sample | Serialize | 3,496,305 | 1,281,983 | 17,188 | fory (2.73x) | +| Sample | Deserialize | 1,045,018 | 765,706 | 12,767 | fory (1.36x) | +| MediaContent | Serialize | 1,425,354 | 678,542 | 29,048 | fory (2.10x) | +| MediaContent | Deserialize | 614,447 | 478,298 | 12,711 | fory (1.28x) | +| StructList | Serialize | 3,307,962 | 1,028,210 | 24,781 | fory (3.22x) | +| StructList | Deserialize | 2,788,200 | 708,596 | 8,160 | fory (3.93x) | +| SampleList | Serialize | 715,734 | 205,380 | 3,361 | fory (3.48x) | +| SampleList | Deserialize | 199,317 | 133,425 | 1,498 | fory (1.49x) | +| MediaContentList | Serialize | 364,097 | 103,721 | 5,538 | fory (3.51x) | +| MediaContentList | Deserialize | 103,421 | 86,331 | 1,529 | fory (1.20x) | + +Serialized data sizes (bytes): + +| Data Type | Fory | Protobuf | Msgpack | +| ---------------- | ---- | -------- | ------- | +| MediaContent | 365 | 301 | 524 | +| MediaContentList | 1535 | 1520 | 2639 | +| Sample | 446 | 375 | 737 | +| SampleList | 1980 | 1890 | 3698 | +| Struct | 58 | 61 | 65 | +| StructList | 184 | 315 | 338 | + +Benchmark details: https://fory.apache.org/docs/benchmarks/swift/ + +## Features + +* feat(grpc): update lexer/parser to support service and rpc definitions for idl compilers by @ayush00git in https://github.com/apache/fory/pull/3308 +* feat(JavaScript): Support EXT,NAMED_EXT by @theweipeng in https://github.com/apache/fory/pull/3312 +* feat(go): add missing type resolver for uint{16,32,64}slice by @BrianLii in https://github.com/apache/fory/pull/3311 +* feat(JavaScript): support ForyField by @theweipeng in https://github.com/apache/fory/pull/3314 +* feat(JavaScript): align xlang protocol by @theweipeng in https://github.com/apache/fory/pull/3316 +* feat(javascript): add float16 support by @ayush00git in https://github.com/apache/fory/pull/3253 +* feat(JavaScript): Align testcases by @theweipeng in https://github.com/apache/fory/pull/3319 +* feat(go): update float16 array/slice logic in createSerializer by @BrianLii in https://github.com/apache/fory/pull/3318 +* feat(JavaScript): Align testcase by @theweipeng in https://github.com/apache/fory/pull/3320 +* feat(JavaScript): Align testcases by @theweipeng in https://github.com/apache/fory/pull/3321 +* feat(dart): align dart xlang serialization by @chaokunyang in https://github.com/apache/fory/pull/3322 +* feat(go): improve test coverage for int slice primitive serializers by @BrianLii in https://github.com/apache/fory/pull/3313 +* refactor(dart): revamp runtime API and unify codegen naming by @chaokunyang in https://github.com/apache/fory/pull/3323 +* feat(JavaScript): Align xlang protocol by @theweipeng in https://github.com/apache/fory/pull/3326 +* feat(JavaScript): fix test_polymorphic_map by @theweipeng in https://github.com/apache/fory/pull/3327 +* feat(dart): align dart with xlang serialization spec by @chaokunyang in https://github.com/apache/fory/pull/3325 +* feat(go): add support for bfloat16 by @BrianLii in https://github.com/apache/fory/pull/3310 +* feat(javascript): add bfloat16 and bfloat16_array support by @miantalha45 in https://github.com/apache/fory/pull/3328 +* feat(JavaScript): fix testcase by @theweipeng in https://github.com/apache/fory/pull/3334 +* refactor(dart): register xlang types by Type by @chaokunyang in https://github.com/apache/fory/pull/3332 +* feat(javascript): align buffer read/write API with Java naming by @miantalha45 in https://github.com/apache/fory/pull/3346 +* refactor(python): unify read/write api for python xlang and native mode by @chaokunyang in https://github.com/apache/fory/pull/3348 +* feat(dart): add float16 to dart by @ayush00git in https://github.com/apache/fory/pull/3336 +* feat(swift): implement fory serialization for swift language by @chaokunyang in https://github.com/apache/fory/pull/3359 +* feat(compiler): add gRPC flags to fory compiler by @ayush00git in https://github.com/apache/fory/pull/3361 +* feat(swift): implement schema evolution compatible mode for fory swift by @chaokunyang in https://github.com/apache/fory/pull/3363 +* feat(swift): dynamic any serializer for polymorphism by @chaokunyang in https://github.com/apache/fory/pull/3368 +* feat(swift): support enum/time serialization for swift by @chaokunyang in https://github.com/apache/fory/pull/3371 +* feat(c++): add msgpack cpp benchmark by @chaokunyang in https://github.com/apache/fory/pull/3365 +* feat(swift): add direct Fory initializer and update Swift docs by @chaokunyang in https://github.com/apache/fory/pull/3373 +* feat: Add IEEE 754 float16 (binary16) support to Rust runtime by @AshharAhmadKhan in https://github.com/apache/fory/pull/3252 +* feat(c#): c# serialization implementation by @chaokunyang in https://github.com/apache/fory/pull/3383 +* perf(csharp): add csharp benchmarks and optimize hot serialization paths by @chaokunyang in https://github.com/apache/fory/pull/3396 +* refactor(benchmarks): rename benchmark directories and update links by @chaokunyang in https://github.com/apache/fory/pull/3398 +* refactor(java): unify serializer write/read APIs and remove xwrite/xread by @chaokunyang in https://github.com/apache/fory/pull/3400 +* perf(swift): add fory swift serialization benchmark and optimize perf by @chaokunyang in https://github.com/apache/fory/pull/3395 +* refactor(c#): refactor serializer interface to minimize API surface by @chaokunyang in https://github.com/apache/fory/pull/3403 +* feat(compiler): add csharp target and idl integration tests by @chaokunyang in https://github.com/apache/fory/pull/3406 +* feat(swift): harden decode paths and add missing wire type support by @chaokunyang in https://github.com/apache/fory/pull/3427 +* feat(c#): add max depth and code lint support by @chaokunyang in https://github.com/apache/fory/pull/3428 +* feat(c++/python): support stream deserialization for c++ and python by @chaokunyang in https://github.com/apache/fory/pull/3307 +* feat(swift): fory swift schema idl codegen by @chaokunyang in https://github.com/apache/fory/pull/3433 +* feat(dart): add configurable deserialization size guardrails by @yash-agarwa-l in https://github.com/apache/fory/pull/3434 +* refactor(dart): merge all runtime exceptions into single fory_exception.dart by @yash-agarwa-l in https://github.com/apache/fory/pull/3436 +* perf(python): optimize pyfory collection serialization performance by @chaokunyang in https://github.com/apache/fory/pull/3441 +* feat(python): fast cython struct serializer by @chaokunyang in https://github.com/apache/fory/pull/3443 +* perf(python): add python benchmark suite by @chaokunyang in https://github.com/apache/fory/pull/3448 +* feat(python/cpp): add streaming serialization support to python and c++ by @chaokunyang in https://github.com/apache/fory/pull/3449 +* feat(python/c++): shrink stream buffers after struct deserialization by @chaokunyang in https://github.com/apache/fory/pull/3453 +* perf(c#): add csharp benchmark results by @chaokunyang in https://github.com/apache/fory/pull/3451 +* refactor: clean java serialize api by @chaokunyang in https://github.com/apache/fory/pull/3454 +* feat(rust): forbid late type registration after resolver snapshot ini… by @Geethapranay1 in https://github.com/apache/fory/pull/3435 +* perf(ci): add Cargo caching to Rust CI jobs by @moon3482 in https://github.com/apache/fory/pull/3431 +* feat(python): add configurable size guardrails by @eyad-hazem-elmorsy in https://github.com/apache/fory/pull/3429 +* feat(go): add go desrialization support via io streams by @ayush00git in https://github.com/apache/fory/pull/3374 +* perf(go): remove //go:inline directives and mark cold paths as //go:noinline by @ayush00git in https://github.com/apache/fory/pull/3456 +* feat(c++): add configurable deserialization size guardrails by @shivendra-dev54 in https://github.com/apache/fory/pull/3455 +* perf(swift): optimize swift performance by @chaokunyang in https://github.com/apache/fory/pull/3457 +* feat(swift): make fory swift usable as deps by @chaokunyang in https://github.com/apache/fory/pull/3462 +* perf: add fory performance optimization skill by @chaokunyang in https://github.com/apache/fory/pull/3463 +* feat(xlang): support per-type evolution override by @chaokunyang in https://github.com/apache/fory/pull/3465 +* feat(javascript): limit the depth of deserialize & serialize by @miantalha45 in https://github.com/apache/fory/pull/3382 + +## Bug Fix + +* fix(java): Fix EnumSetSerializer for enums with overriding methods by @NotLebedev in https://github.com/apache/fory/pull/3315 +* fix(java): Deserialize nested HashMap subclasses by @mandrean in https://github.com/apache/fory/pull/3342 +* fix(java): support TreeSet/TreeMap subclasses without Comparator constructor in SortedSet/SortedMapSerializer by @mandrean in https://github.com/apache/fory/pull/3344 +* fix(c++): fix buffer read/write bound check by @chaokunyang in https://github.com/apache/fory/pull/3418 +* fix: avoid NoClassDefFoundError in supportCodegenForJavaSerialization by @siy in https://github.com/apache/fory/pull/3424 +* fix(docs): updated the compiler guide by @ayush00git in https://github.com/apache/fory/pull/3420 +* fix(python): return UTC-aware datetime instead of naive datetime by @yuta4895 in https://github.com/apache/fory/pull/3439 +* fix(docs): adjusted sidebar position and fixed typos by @ayush00git in https://github.com/apache/fory/pull/3450 +* fix(python): support tuple dataclass fields and object instances by @chaokunyang in https://github.com/apache/fory/pull/3468 +* fix(python): fix python wheel build by @chaokunyang in https://github.com/apache/fory/pull/3469 +* fix(java): avoid deflater meta decompression hang on invalid input by @chaokunyang in https://github.com/apache/fory/pull/3472 + +## Other Improvements + +* docs: update guide and compiler docs by @chaokunyang in https://github.com/apache/fory/pull/3298 +* docs: fix broken docs links and add fory-site check ci by @chaokunyang in https://github.com/apache/fory/pull/3299 +* docs(java): fix benchmark images by @chaokunyang in https://github.com/apache/fory/pull/3304 +* docs(c++): update readme and benchmarks docs by @chaokunyang in https://github.com/apache/fory/pull/3305 +* docs: fix incorrect docs by @chaokunyang in https://github.com/apache/fory/pull/3309 +* chore: Bump release version to 0.15.0 by @chaokunyang in https://github.com/apache/fory/pull/3317 +* chore(deps): bump org.apache.avro:avro from 1.11.4 to 1.11.5 in /benchmarks/java_benchmark by @dependabot[bot] in https://github.com/apache/fory/pull/3338 +* chore(python): define dependencies for development environment by @yuta4895 in https://github.com/apache/fory/pull/3360 +* docs(java): update java benchmark plots by @chaokunyang in https://github.com/apache/fory/pull/3366 +* docs(swift): refine swift api and docs by @chaokunyang in https://github.com/apache/fory/pull/3372 +* chore: Bump MessagePack from 2.5.172 to 2.5.187 by @dependabot[bot] in https://github.com/apache/fory/pull/3401 +* docs(csharp): add csharp guide and update README by @chaokunyang in https://github.com/apache/fory/pull/3404 +* docs: adjust guide docs sidebar by @chaokunyang in https://github.com/apache/fory/pull/3407 +* chore(python): handle duplicate field names by @eyad-hazem-elmorsy in https://github.com/apache/fory/pull/3384 +* docs: Fix grammar: we follows to we follow by @04cb in https://github.com/apache/fory/pull/3442 +* chore(c#): prepare for c# release by @chaokunyang in https://github.com/apache/fory/pull/3464 +* docs: add ai contributing policy by @chaokunyang in https://github.com/apache/fory/pull/3437 +* docs: simplify PR AI checklist and rename AI policy file by @chaokunyang in https://github.com/apache/fory/pull/3470 + +## New Contributors + +* @BrianLii made their first contribution in https://github.com/apache/fory/pull/3311 +* @NotLebedev made their first contribution in https://github.com/apache/fory/pull/3315 +* @miantalha45 made their first contribution in https://github.com/apache/fory/pull/3328 +* @yuta4895 made their first contribution in https://github.com/apache/fory/pull/3360 +* @AshharAhmadKhan made their first contribution in https://github.com/apache/fory/pull/3252 +* @siy made their first contribution in https://github.com/apache/fory/pull/3424 +* @yash-agarwa-l made their first contribution in https://github.com/apache/fory/pull/3434 +* @eyad-hazem-elmorsy made their first contribution in https://github.com/apache/fory/pull/3384 +* @04cb made their first contribution in https://github.com/apache/fory/pull/3442 +* @Geethapranay1 made their first contribution in https://github.com/apache/fory/pull/3435 +* @moon3482 made their first contribution in https://github.com/apache/fory/pull/3431 +* @shivendra-dev54 made their first contribution in https://github.com/apache/fory/pull/3455 +**Full Changelog**: https://github.com/apache/fory/compare/v0.15.0...v0.16.0 diff --git a/docs/guide/cpp/index.md b/docs/guide/cpp/index.md index 2b363261f8..32f69bc9c9 100644 --- a/docs/guide/cpp/index.md +++ b/docs/guide/cpp/index.md @@ -59,7 +59,7 @@ include(FetchContent) FetchContent_Declare( fory GIT_REPOSITORY https://github.com/apache/fory.git - GIT_TAG v0.15.0 + GIT_TAG v0.16.0 SOURCE_SUBDIR cpp ) FetchContent_MakeAvailable(fory) @@ -89,11 +89,11 @@ module( bazel_dep(name = "rules_cc", version = "0.1.1") -bazel_dep(name = "fory", version = "0.15.0") +bazel_dep(name = "fory", version = "0.16.0") git_override( module_name = "fory", remote = "https://github.com/apache/fory.git", - commit = "v0.15.0", # Or use a specific commit hash for reproducibility + commit = "v0.16.0", # Or use a specific commit hash for reproducibility ) ``` @@ -117,7 +117,7 @@ bazel run //:my_app For local development, you can use `local_path_override` instead: ```bazel -bazel_dep(name = "fory", version = "0.15.0") +bazel_dep(name = "fory", version = "0.16.0") local_path_override( module_name = "fory", path = "/path/to/fory", diff --git a/docs/guide/java/compression.md b/docs/guide/java/compression.md index 46775dacdb..efe261aad4 100644 --- a/docs/guide/java/compression.md +++ b/docs/guide/java/compression.md @@ -84,7 +84,7 @@ CompressedArraySerializers.registerSerializers(fory); <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-simd</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` diff --git a/docs/guide/kotlin/index.md b/docs/guide/kotlin/index.md index 65c2969656..16254686a9 100644 --- a/docs/guide/kotlin/index.md +++ b/docs/guide/kotlin/index.md @@ -50,14 +50,14 @@ See [Java Features](../java/index.md#features) for complete feature list. <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-kotlin</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` ### Gradle ```kotlin -implementation("org.apache.fory:fory-kotlin:0.15.0") +implementation("org.apache.fory:fory-kotlin:0.16.0") ``` ## Quick Start diff --git a/docs/guide/scala/index.md b/docs/guide/scala/index.md index 60976534b3..f99782d544 100644 --- a/docs/guide/scala/index.md +++ b/docs/guide/scala/index.md @@ -48,7 +48,7 @@ See [Java Features](../java/index.md#features) for complete feature list. Add the dependency with sbt: ```sbt -libraryDependencies += "org.apache.fory" %% "fory-scala" % "0.15.0" +libraryDependencies += "org.apache.fory" %% "fory-scala" % "0.16.0" ``` ## Quick Start diff --git a/docs/guide/xlang/getting-started.md b/docs/guide/xlang/getting-started.md index 53537d322d..e6a4964ffe 100644 --- a/docs/guide/xlang/getting-started.md +++ b/docs/guide/xlang/getting-started.md @@ -31,14 +31,14 @@ This guide covers installation and basic setup for cross-language serialization <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-core</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` **Gradle:** ```gradle -implementation 'org.apache.fory:fory-core:0.15.0' +implementation 'org.apache.fory:fory-core:0.16.0' ``` ### Python diff --git a/docs/introduction/benchmark.md b/docs/introduction/benchmark.md index 64727d459c..195418881d 100644 --- a/docs/introduction/benchmark.md +++ b/docs/introduction/benchmark.md @@ -53,6 +53,36 @@ Fory C++ demonstrates competitive performance compared to Protobuf C++ serializa <img src="/img/benchmarks/cpp/throughput.png" width="90%"/> +## Go Benchmark + +Fory Go demonstrates strong performance compared to Protobuf and Msgpack across +single-object and list workloads. + +<img src="/img/blog/fory_0_16_0_release/go_benchmark_combined.png" width="90%"/> + +Note: Results depend on hardware, dataset, and implementation versions. See the +Go benchmark report for details: https://fory.apache.org/docs/benchmarks/go/ + +## C# Benchmark + +Fory C# demonstrates strong performance compared to Protobuf and Msgpack across +typed object serialization and deserialization workloads. + +<img src="/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png" width="90%"/> + +Note: Results depend on hardware and runtime versions. See the C# benchmark +report for details: https://fory.apache.org/docs/benchmarks/csharp/ + +## Swift Benchmark + +Fory Swift demonstrates strong performance compared to Protobuf and Msgpack +across both scalar-object and list workloads. + +<img src="/img/blog/fory_0_16_0_release/swift_benchmark_combined.png" width="90%"/> + +Note: Results depend on hardware and runtime versions. See the Swift benchmark +report for details: https://fory.apache.org/docs/benchmarks/swift/ + ## JavaScript Benchmark <img width="50%" alt="" src="/img/benchmarks/javascript/complex_object.jpg" /> diff --git a/docs/start/install.md b/docs/start/install.md index 951a42fbdc..9f73a9c5d2 100644 --- a/docs/start/install.md +++ b/docs/start/install.md @@ -16,7 +16,7 @@ To add a dependency on Apache Fory™ using Maven, use the following: <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-core</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> <!-- Optional row format support --> <!-- @@ -44,7 +44,7 @@ To add a dependency on Apache Fory™ scala for scala 2.13 with maven, use the f <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-scala_2.13</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` @@ -54,20 +54,20 @@ To add a dependency on Apache Fory™ scala for scala 3 with maven, use the foll <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-scala_3</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` To add a dependency on Apache Fory™ scala for scala 2.13 with sbt, use the following: ```sbt -libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "0.15.0" +libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "0.16.0" ``` To add a dependency on Apache Fory™ scala for scala 3 with sbt, use the following: ```sbt -libraryDependencies += "org.apache.fory" % "fory-scala_3" % "0.15.0" +libraryDependencies += "org.apache.fory" % "fory-scala_3" % "0.16.0" ``` ## Kotlin @@ -78,7 +78,7 @@ To add a dependency on Apache Fory™ kotlin with maven, use the following: <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-kotlin</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` @@ -86,7 +86,7 @@ To add a dependency on Apache Fory™ kotlin with maven, use the following: ```bash python -m pip install --upgrade pip -pip install pyfory==0.15.0 +pip install pyfory==0.16.0 ``` ## Rust @@ -99,7 +99,7 @@ fory = "0.14" or just execute command: ```bash -cargo add [email protected] +cargo add [email protected] ``` ## JavaScript diff --git a/i18n/zh-CN/docusaurus-plugin-content-blog/2026-03-17-fory_0_16_0_release.md b/i18n/zh-CN/docusaurus-plugin-content-blog/2026-03-17-fory_0_16_0_release.md new file mode 100644 index 0000000000..600b6cdf7f --- /dev/null +++ b/i18n/zh-CN/docusaurus-plugin-content-blog/2026-03-17-fory_0_16_0_release.md @@ -0,0 +1,287 @@ +--- +slug: fory_0_16_0_release +title: Fory v0.16.0 发布 +authors: [chaokunyang] +tags: [fory, c#, swift, c++, java, python, compiler] +--- + +Apache Fory 团队很高兴宣布 0.16.0 版本正式发布。这是一个重要版本,包含来自 17 位贡献者的 [144 个 PR](https://github.com/apache/fory/compare/v0.14.1...v0.15.0)。请访问 [Install 页面](https://fory.apache.org/docs/start/install) 获取各平台安装方式。 + +## 发布亮点 + +* feat(c#): 新增 c# serialization 实现,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3383 +* feat(c#): 为 compiler 增加 csharp target 与 idl integration tests,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3406 +* feat(swift): 为 Swift 语言实现 fory serialization,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3359 +* feat(swift): 新增 fory swift schema idl 代码生成,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3433 +* feat(JavaScript): 支持 EXT、NAMED_EXT,作者 @theweipeng,见 https://github.com/apache/fory/pull/3312 +* feat(JavaScript): 对齐 xlang 协议,作者 @theweipeng,见 https://github.com/apache/fory/pull/3316 +* refactor(python): 统一 python xlang 与 native mode 的 read/write API,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3348 +* feat(c++/python): 为 c++ 和 python 增加 stream deserialization 支持,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3307 +* feat(python): 新增高性能 cython struct serializer,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3443 +* refactor(java): 统一 serializer write/read API 并移除 xwrite/xread,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3400 + +## C\# Serialization:首次发布 + +Apache Fory 0.16.0 是首个正式提供 C# serialization 支持的版本。C# 运行时面向现代 .NET 工作负载设计,并带来了与其他 Fory 运行时一致的对象图、跨语言和 Schema 演进能力。 + +**关键能力:** + +* 面向 .NET 8+ 的高性能二进制序列化,并通过 `[ForyObject]` 类型提供基于 source generator 的 serializer +* 支持与 Java、Python、C++、Go、Rust 和 JavaScript 的跨语言模式 +* 可选的引用跟踪,用于处理共享引用和循环引用对象图 +* 用于 Schema 演进的兼容模式 +* 支持动态对象载荷、自定义 serializer,以及 namespace/name 注册 API +* 为并发服务工作负载提供 `ThreadSafeFory` 包装器 +* 在 Fory IDL/compiler 工作流中提供 C# target 支持 + +### 快速开始 + +```csharp +using Apache.Fory; + +[ForyObject] +public sealed class User +{ + public long Id { get; set; } + public string Name { get; set; } = string.Empty; + public string? Email { get; set; } +} + +Fory fory = Fory.Builder() + .Xlang(true) + .Compatible(true) + .Build(); +fory.Register<User>(1); + +byte[] payload = fory.Serialize(new User +{ + Id = 1, + Name = "Alice", + Email = "[email protected]", +}); +User decoded = fory.Deserialize<User>(payload); +``` + +* C# 指南: https://fory.apache.org/docs/guide/csharp/ +* Compiler 文档: https://fory.apache.org/docs/compiler/ + +### C# 基准测试 + +<img src="/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png" width="90%"/> + +以下是代表性数据结构上的耗时结果(ns/op,越低越好),用于比较 Fory、Protobuf 与 Msgpack。 + +| Data Type | Operation | Fory | Protobuf | Msgpack | +| ---------------- | ----------- | ------ | -------- | ------- | +| Struct | Serialize | 39.2 | 121.5 | 66.0 | +| Struct | Deserialize | 58.3 | 180.1 | 102.6 | +| Sample | Serialize | 269.2 | 562.6 | 339.6 | +| Sample | Deserialize | 175.6 | 1084.9 | 531.8 | +| MediaContent | Serialize | 306.3 | 434.7 | 351.5 | +| MediaContent | Deserialize | 379.4 | 718.8 | 676.9 | +| StructList | Serialize | 136.1 | 468.5 | 266.9 | +| StructList | Deserialize | 221.1 | 687.0 | 488.5 | +| SampleList | Serialize | 1198.9 | 2811.9 | 1635.7 | +| SampleList | Deserialize | 791.5 | 5174.5 | 2629.2 | +| MediaContentList | Serialize | 1393.9 | 2199.4 | 1710.9 | +| MediaContentList | Deserialize | 1719.5 | 3373.1 | 3401.2 | + +序列化数据大小(bytes): + +| Data Type | Fory | Protobuf | Msgpack | +| ---------------- | ---- | -------- | ------- | +| Struct | 58 | 61 | 55 | +| Sample | 446 | 460 | 562 | +| MediaContent | 365 | 307 | 479 | +| StructList | 184 | 315 | 284 | +| SampleList | 1980 | 2315 | 2819 | +| MediaContentList | 1535 | 1550 | 2404 | + +详细基准数据请参见: https://fory.apache.org/docs/benchmarks/csharp/ + +## Swift Serialization:首次发布 + +Apache Fory 0.16.0 也正式带来了 Swift serialization 的首次发布。Swift 实现重点关注 idiomatic API 设计、基于 macro 的模型序列化、跨语言兼容能力,以及对象图工作负载的支持。 + +**关键能力:** + +* 面向 Swift value/reference types 的高性能序列化 +* 使用 `@ForyObject` macro 实现零样板代码的模型序列化 +* 支持与 Java、Python、C++、Go、Rust 和 JavaScript 的跨语言协议兼容 +* 提供跨版本 Schema 演进所需的兼容模式 +* 支持 `Any`、`AnyObject`、`any Serializer` 和 `AnyHashable` 等动态值类型 +* 支持共享引用和循环引用图中的引用跟踪,并可处理 class 上的弱引用 +* 在 Fory IDL/compiler 工作流中提供 Swift target 支持 + +### 快速开始 + +```swift +import Fory + +@ForyObject +struct User: Equatable { + var name: String = "" + var age: Int32 = 0 +} + +let fory = Fory(xlang: true, trackRef: false, compatible: true) +fory.register(User.self, id: 1) + +let input = User(name: "Alice", age: 30) +let data = try fory.serialize(input) +let output: User = try fory.deserialize(data) +``` + +* Swift 指南: https://fory.apache.org/docs/guide/swift/ +* Compiler 文档: https://fory.apache.org/docs/compiler/ + +### Swift 基准测试 + +<img src="/img/blog/fory_0_16_0_release/swift_benchmark_combined.png" width="90%"/> + +以下是代表性数据结构上的吞吐结果(ops/sec,越高越好),用于比较 Fory、Protobuf 与 Msgpack。 + +| Data Type | Operation | Fory | Protobuf | Msgpack | Fastest | +| ---------------- | ----------- | ---------- | --------- | ------- | ------------ | +| Struct | Serialize | 9,727,950 | 6,572,406 | 141,248 | fory (1.48x) | +| Struct | Deserialize | 11,889,570 | 8,584,510 | 99,792 | fory (1.39x) | +| Sample | Serialize | 3,496,305 | 1,281,983 | 17,188 | fory (2.73x) | +| Sample | Deserialize | 1,045,018 | 765,706 | 12,767 | fory (1.36x) | +| MediaContent | Serialize | 1,425,354 | 678,542 | 29,048 | fory (2.10x) | +| MediaContent | Deserialize | 614,447 | 478,298 | 12,711 | fory (1.28x) | +| StructList | Serialize | 3,307,962 | 1,028,210 | 24,781 | fory (3.22x) | +| StructList | Deserialize | 2,788,200 | 708,596 | 8,160 | fory (3.93x) | +| SampleList | Serialize | 715,734 | 205,380 | 3,361 | fory (3.48x) | +| SampleList | Deserialize | 199,317 | 133,425 | 1,498 | fory (1.49x) | +| MediaContentList | Serialize | 364,097 | 103,721 | 5,538 | fory (3.51x) | +| MediaContentList | Deserialize | 103,421 | 86,331 | 1,529 | fory (1.20x) | + +序列化数据大小(bytes): + +| Data Type | Fory | Protobuf | Msgpack | +| ---------------- | ---- | -------- | ------- | +| MediaContent | 365 | 301 | 524 | +| MediaContentList | 1535 | 1520 | 2639 | +| Sample | 446 | 375 | 737 | +| SampleList | 1980 | 1890 | 3698 | +| Struct | 58 | 61 | 65 | +| StructList | 184 | 315 | 338 | + +详细基准数据请参见: https://fory.apache.org/docs/benchmarks/swift/ + +## 功能特性 + +* feat(grpc): 更新 lexer/parser,支持为 idl compiler 定义 service 和 rpc,作者 @ayush00git,见 https://github.com/apache/fory/pull/3308 +* feat(JavaScript): 支持 EXT、NAMED_EXT,作者 @theweipeng,见 https://github.com/apache/fory/pull/3312 +* feat(go): 为 uint{16,32,64}slice 补充缺失的 type resolver,作者 @BrianLii,见 https://github.com/apache/fory/pull/3311 +* feat(JavaScript): 支持 ForyField,作者 @theweipeng,见 https://github.com/apache/fory/pull/3314 +* feat(JavaScript): 对齐 xlang 协议,作者 @theweipeng,见 https://github.com/apache/fory/pull/3316 +* feat(javascript): 增加 float16 支持,作者 @ayush00git,见 https://github.com/apache/fory/pull/3253 +* feat(JavaScript): 对齐测试用例,作者 @theweipeng,见 https://github.com/apache/fory/pull/3319 +* feat(go): 更新 createSerializer 中的 float16 array/slice 逻辑,作者 @BrianLii,见 https://github.com/apache/fory/pull/3318 +* feat(JavaScript): 对齐测试用例,作者 @theweipeng,见 https://github.com/apache/fory/pull/3320 +* feat(JavaScript): 对齐测试用例,作者 @theweipeng,见 https://github.com/apache/fory/pull/3321 +* feat(dart): 对齐 dart xlang serialization,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3322 +* feat(go): 提升 int slice primitive serializer 的测试覆盖率,作者 @BrianLii,见 https://github.com/apache/fory/pull/3313 +* refactor(dart): 重整 runtime API 并统一 codegen 命名,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3323 +* feat(JavaScript): 对齐 xlang 协议,作者 @theweipeng,见 https://github.com/apache/fory/pull/3326 +* feat(JavaScript): 修复 `test_polymorphic_map`,作者 @theweipeng,见 https://github.com/apache/fory/pull/3327 +* feat(dart): 对齐 dart 与 xlang serialization spec,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3325 +* feat(go): 增加 bfloat16 支持,作者 @BrianLii,见 https://github.com/apache/fory/pull/3310 +* feat(javascript): 增加 bfloat16 与 bfloat16_array 支持,作者 @miantalha45,见 https://github.com/apache/fory/pull/3328 +* feat(JavaScript): 修复测试用例,作者 @theweipeng,见 https://github.com/apache/fory/pull/3334 +* refactor(dart): 按 Type 注册 xlang 类型,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3332 +* feat(javascript): 统一 buffer read/write API 与 Java 命名风格,作者 @miantalha45,见 https://github.com/apache/fory/pull/3346 +* refactor(python): 统一 python xlang 与 native mode 的 read/write API,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3348 +* feat(dart): 为 dart 增加 float16,作者 @ayush00git,见 https://github.com/apache/fory/pull/3336 +* feat(swift): 为 Swift 语言实现 fory serialization,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3359 +* feat(compiler): 为 fory compiler 增加 gRPC flags,作者 @ayush00git,见 https://github.com/apache/fory/pull/3361 +* feat(swift): 为 fory swift 实现 Schema 演进兼容模式,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3363 +* feat(swift): 为多态场景增加 dynamic any serializer,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3368 +* feat(swift): 为 swift 增加 enum/time serialization 支持,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3371 +* feat(c++): 增加 msgpack cpp benchmark,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3365 +* feat(swift): 增加直接的 Fory initializer,并更新 Swift 文档,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3373 +* feat: 为 Rust 运行时增加 IEEE 754 float16(binary16)支持,作者 @AshharAhmadKhan,见 https://github.com/apache/fory/pull/3252 +* feat(c#): 新增 c# serialization 实现,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3383 +* perf(csharp): 增加 csharp benchmark 并优化热点序列化路径,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3396 +* refactor(benchmarks): 重命名 benchmark 目录并更新链接,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3398 +* refactor(java): 统一 serializer write/read API 并移除 xwrite/xread,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3400 +* perf(swift): 增加 fory swift serialization benchmark 并优化性能,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3395 +* refactor(c#): 重构 serializer 接口以缩小 API surface,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3403 +* feat(compiler): 为 compiler 增加 csharp target 与 idl integration tests,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3406 +* feat(swift): 加固 decode 路径并补齐缺失的 wire type 支持,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3427 +* feat(c#): 增加 max depth 与代码 lint 支持,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3428 +* feat(c++/python): 为 c++ 和 python 增加 stream deserialization 支持,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3307 +* feat(swift): 新增 fory swift schema idl 代码生成,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3433 +* feat(dart): 增加可配置的反序列化大小护栏,作者 @yash-agarwa-l,见 https://github.com/apache/fory/pull/3434 +* refactor(dart): 将所有 runtime 异常合并到单个 `fory_exception.dart` 中,作者 @yash-agarwa-l,见 https://github.com/apache/fory/pull/3436 +* perf(python): 优化 pyfory collection serialization 性能,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3441 +* feat(python): 新增高性能 cython struct serializer,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3443 +* perf(python): 增加 python benchmark suite,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3448 +* feat(python/cpp): 为 python 和 c++ 增加 stream serialization 支持,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3449 +* feat(python/c++): 在 struct 反序列化后收缩 stream buffer,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3453 +* perf(c#): 增加 csharp benchmark 结果,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3451 +* refactor: 清理 java serialize API,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3454 +* feat(rust): 禁止在 resolver snapshot 初始化后继续进行类型注册,作者 @Geethapranay1,见 https://github.com/apache/fory/pull/3435 +* perf(ci): 为 Rust CI job 增加 Cargo 缓存,作者 @moon3482,见 https://github.com/apache/fory/pull/3431 +* feat(python): 增加可配置的大小护栏,作者 @eyad-hazem-elmorsy,见 https://github.com/apache/fory/pull/3429 +* feat(go): 增加通过 io streams 进行 go 反序列化的支持,作者 @ayush00git,见 https://github.com/apache/fory/pull/3374 +* perf(go): 移除 `//go:inline` 指令,并将冷路径标记为 `//go:noinline`,作者 @ayush00git,见 https://github.com/apache/fory/pull/3456 +* feat(c++): 增加可配置的反序列化大小护栏,作者 @shivendra-dev54,见 https://github.com/apache/fory/pull/3455 +* perf(swift): 优化 swift 性能,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3457 +* feat(swift): 让 fory swift 可以作为依赖使用,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3462 +* perf: 增加 fory performance optimization skill,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3463 +* feat(xlang): 支持按类型覆盖演进策略,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3465 +* feat(javascript): 为 deserialize 与 serialize 增加深度限制,作者 @miantalha45,见 https://github.com/apache/fory/pull/3382 + +## Bug 修复 + +* fix(java): 修复带有覆盖方法的枚举在 EnumSetSerializer 中的问题,作者 @NotLebedev,见 https://github.com/apache/fory/pull/3315 +* fix(java): 修复嵌套 HashMap 子类的反序列化问题,作者 @mandrean,见 https://github.com/apache/fory/pull/3342 +* fix(java): 修复 SortedSet/SortedMapSerializer 在无 Comparator 构造函数的 TreeSet/TreeMap 子类上的支持问题,作者 @mandrean,见 https://github.com/apache/fory/pull/3344 +* fix(c++): 修复 buffer 读写越界检查,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3418 +* fix: 避免 `supportCodegenForJavaSerialization` 中出现 `NoClassDefFoundError`,作者 @siy,见 https://github.com/apache/fory/pull/3424 +* fix(docs): 更新 compiler guide,作者 @ayush00git,见 https://github.com/apache/fory/pull/3420 +* fix(python): 返回带 UTC 时区的 datetime,而不是 naive datetime,作者 @yuta4895,见 https://github.com/apache/fory/pull/3439 +* fix(docs): 调整 sidebar 位置并修正拼写错误,作者 @ayush00git,见 https://github.com/apache/fory/pull/3450 +* fix(python): 支持 tuple dataclass 字段和对象实例,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3468 +* fix(python): 修复 python wheel 构建,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3469 +* fix(java): 避免在无效输入上出现 deflater meta 解压挂起,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3472 + +## 其他改进 + +* docs: 更新 guide 与 compiler 文档,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3298 +* docs: 修复文档断链并增加 fory-site check CI,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3299 +* docs(java): 更新 java benchmark 图片,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3304 +* docs(c++): 更新 readme 与 benchmark 文档,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3305 +* docs: 修复错误文档内容,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3309 +* chore: 将发布版本提升到 0.15.0,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3317 +* chore(deps): 将 `/benchmarks/java_benchmark` 中的 `org.apache.avro:avro` 从 1.11.4 升级到 1.11.5,作者 @dependabot[bot],见 https://github.com/apache/fory/pull/3338 +* chore(python): 为开发环境定义依赖,作者 @yuta4895,见 https://github.com/apache/fory/pull/3360 +* docs(java): 更新 java benchmark 图表,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3366 +* docs(swift): 优化 swift API 与文档,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3372 +* chore: 将 MessagePack 从 2.5.172 升级到 2.5.187,作者 @dependabot[bot],见 https://github.com/apache/fory/pull/3401 +* docs(csharp): 增加 csharp guide 并更新 README,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3404 +* docs: 调整 guide 文档 sidebar,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3407 +* chore(python): 处理重复字段名,作者 @eyad-hazem-elmorsy,见 https://github.com/apache/fory/pull/3384 +* docs: 修复语法错误 “we follows” -> “we follow”,作者 @04cb,见 https://github.com/apache/fory/pull/3442 +* chore(c#): 为 c# 发布做准备,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3464 +* docs: 增加 AI 贡献策略,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3437 +* docs: 简化 PR AI checklist,并重命名 AI policy 文件,作者 @chaokunyang,见 https://github.com/apache/fory/pull/3470 + +## 新贡献者 + +* @BrianLii 在 https://github.com/apache/fory/pull/3311 完成了首次贡献 +* @NotLebedev 在 https://github.com/apache/fory/pull/3315 完成了首次贡献 +* @miantalha45 在 https://github.com/apache/fory/pull/3328 完成了首次贡献 +* @yuta4895 在 https://github.com/apache/fory/pull/3360 完成了首次贡献 +* @AshharAhmadKhan 在 https://github.com/apache/fory/pull/3252 完成了首次贡献 +* @siy 在 https://github.com/apache/fory/pull/3424 完成了首次贡献 +* @yash-agarwa-l 在 https://github.com/apache/fory/pull/3434 完成了首次贡献 +* @eyad-hazem-elmorsy 在 https://github.com/apache/fory/pull/3384 完成了首次贡献 +* @04cb 在 https://github.com/apache/fory/pull/3442 完成了首次贡献 +* @Geethapranay1 在 https://github.com/apache/fory/pull/3435 完成了首次贡献 +* @moon3482 在 https://github.com/apache/fory/pull/3431 完成了首次贡献 +* @shivendra-dev54 在 https://github.com/apache/fory/pull/3455 完成了首次贡献 + +**完整更新日志**: https://github.com/apache/fory/compare/v0.15.0...v0.16.0 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.16/introduction/benchmark.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.16/introduction/benchmark.md index 0b5798efdd..1145623351 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.16/introduction/benchmark.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.16/introduction/benchmark.md @@ -39,6 +39,36 @@ sidebar_position: 2 注意:结果取决于硬件、数据集和实现版本。有关如何自行运行性能测试的信息,请参阅 Fory Rust Benchmark 指南:https://github.com/apache/fory/blob/main/benchmarks/rust_benchmark/README.md +## C++ 性能测试 + +Fory C++ 在性能方面相较 Protobuf C++ 序列化框架具有竞争力。 + +<img src="/img/benchmarks/cpp/throughput.png" width="90%"/> + +## Go 性能测试 + +Fory Go 在单对象和列表两类工作负载下,相较 Protobuf 与 Msgpack 展现出较强的性能表现。 + +<img src="/img/blog/fory_0_16_0_release/go_benchmark_combined.png" width="90%"/> + +注意:结果取决于硬件、数据集和实现版本。详细信息请参见 Go benchmark 报告: https://fory.apache.org/docs/benchmarks/go/ + +## C# 性能测试 + +Fory C# 在强类型对象的序列化和反序列化场景下,相较 Protobuf 与 Msgpack 展现出较强的性能表现。 + +<img src="/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png" width="90%"/> + +注意:结果取决于硬件和运行时版本。详细信息请参见 C# benchmark 报告: https://fory.apache.org/docs/benchmarks/csharp/ + +## Swift 性能测试 + +Fory Swift 在标量对象和列表两类工作负载下,相较 Protobuf 与 Msgpack 展现出较强的性能表现。 + +<img src="/img/blog/fory_0_16_0_release/swift_benchmark_combined.png" width="90%"/> + +注意:结果取决于硬件和运行时版本。详细信息请参见 Swift benchmark 报告: https://fory.apache.org/docs/benchmarks/swift/ + ## JavaScript 性能测试 <img width="33%" alt="" src="/img/benchmarks/javascript/complex_object.jpg" /> diff --git a/src/pages/download/index.md b/src/pages/download/index.md index 994d5b4192..b8a2320ba7 100644 --- a/src/pages/download/index.md +++ b/src/pages/download/index.md @@ -9,11 +9,11 @@ For binary install, please see Apache Fory™ [install](/docs/start/install/) do ## The latest release -The latest source release is 0.15.0: +The latest source release is 0.16.0: | Version | Date | Source | Release Notes | | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -| 0.15.0 | 2026-02-10 | [source](https://www.apache.org/dyn/closer.lua/fory/0.15.0/apache-fory-0.15.0-src.tar.gz?action=download) [asc](https://downloads.apache.org/fory/0.15.0/apache-fory-0.15.0-src.tar.gz.asc) [sha512](https://downloads.apache.org/fory/0.15.0/apache-fory-0.15.0-src.tar.gz.sha512) | [release notes](https://github.com/apache/fory/releases/tag/v0.15.0) | +| 0.16.0 | 2026-03-17 | [source](https://www.apache.org/dyn/closer.lua/fory/0.16.0/apache-fory-0.16.0-src.tar.gz?action=download) [asc](https://downloads.apache.org/fory/0.16.0/apache-fory-0.16.0-src.tar.gz.asc) [sha512](https://downloads.apache.org/fory/0.16.0/apache-fory-0.16.0-src.tar.gz.sha512) | [release notes](https://github.com/apache/fory/releases/tag/v0.16.0) | ## All archived releases @@ -31,13 +31,13 @@ These files are named after the files they relate to but have `.sha512/.asc` ext To verify the SHA digests, you need the `.tgz` and its associated `.tgz.sha512` file. An example command: ```bash -sha512sum --check apache-fory-0.15.0-src.tar.gz +sha512sum --check apache-fory-0.16.0-src.tar.gz ``` It should output something like: ```bash -apache-fory-0.15.0-src.tar.gz: OK +apache-fory-0.16.0-src.tar.gz: OK ``` ### Verifying Signatures @@ -54,7 +54,7 @@ gpg --import KEYS Then you can verify signature: ```bash -gpg --verify apache-fory-0.15.0-src.tar.gz.asc apache-fory-0.15.0-src.tar.gz +gpg --verify apache-fory-0.16.0-src.tar.gz.asc apache-fory-0.16.0-src.tar.gz ``` If something like the following appears, it means the signature is correct: @@ -74,8 +74,8 @@ gpg --fingerprint F4796001336453FDE7BB45709C0212E28DD7828C It should output something like: ```bash -pub rsa4096 2025-02-07 [SC] +pub rsa4096 2025-03-17 [SC] F479 6001 3364 53FD E7BB 4570 9C02 12E2 8DD7 828C uid [ultimate] Weipeng Wang (CODE SIGNING KEY) <[email protected]> -sub rsa4096 2025-02-07 +sub rsa4096 2025-03-17 ``` diff --git a/static/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png b/static/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png new file mode 100644 index 0000000000..77b696c9b4 Binary files /dev/null and b/static/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png differ diff --git a/static/img/blog/fory_0_16_0_release/go_benchmark_combined.png b/static/img/blog/fory_0_16_0_release/go_benchmark_combined.png new file mode 100644 index 0000000000..fe3ede6c22 Binary files /dev/null and b/static/img/blog/fory_0_16_0_release/go_benchmark_combined.png differ diff --git a/static/img/blog/fory_0_16_0_release/swift_benchmark_combined.png b/static/img/blog/fory_0_16_0_release/swift_benchmark_combined.png new file mode 100644 index 0000000000..291dc81451 Binary files /dev/null and b/static/img/blog/fory_0_16_0_release/swift_benchmark_combined.png differ diff --git a/versioned_docs/version-0.16/guide/cpp/index.md b/versioned_docs/version-0.16/guide/cpp/index.md index 2b363261f8..32f69bc9c9 100644 --- a/versioned_docs/version-0.16/guide/cpp/index.md +++ b/versioned_docs/version-0.16/guide/cpp/index.md @@ -59,7 +59,7 @@ include(FetchContent) FetchContent_Declare( fory GIT_REPOSITORY https://github.com/apache/fory.git - GIT_TAG v0.15.0 + GIT_TAG v0.16.0 SOURCE_SUBDIR cpp ) FetchContent_MakeAvailable(fory) @@ -89,11 +89,11 @@ module( bazel_dep(name = "rules_cc", version = "0.1.1") -bazel_dep(name = "fory", version = "0.15.0") +bazel_dep(name = "fory", version = "0.16.0") git_override( module_name = "fory", remote = "https://github.com/apache/fory.git", - commit = "v0.15.0", # Or use a specific commit hash for reproducibility + commit = "v0.16.0", # Or use a specific commit hash for reproducibility ) ``` @@ -117,7 +117,7 @@ bazel run //:my_app For local development, you can use `local_path_override` instead: ```bazel -bazel_dep(name = "fory", version = "0.15.0") +bazel_dep(name = "fory", version = "0.16.0") local_path_override( module_name = "fory", path = "/path/to/fory", diff --git a/versioned_docs/version-0.16/guide/java/compression.md b/versioned_docs/version-0.16/guide/java/compression.md index 46775dacdb..efe261aad4 100644 --- a/versioned_docs/version-0.16/guide/java/compression.md +++ b/versioned_docs/version-0.16/guide/java/compression.md @@ -84,7 +84,7 @@ CompressedArraySerializers.registerSerializers(fory); <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-simd</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` diff --git a/versioned_docs/version-0.16/guide/kotlin/index.md b/versioned_docs/version-0.16/guide/kotlin/index.md index 65c2969656..16254686a9 100644 --- a/versioned_docs/version-0.16/guide/kotlin/index.md +++ b/versioned_docs/version-0.16/guide/kotlin/index.md @@ -50,14 +50,14 @@ See [Java Features](../java/index.md#features) for complete feature list. <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-kotlin</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` ### Gradle ```kotlin -implementation("org.apache.fory:fory-kotlin:0.15.0") +implementation("org.apache.fory:fory-kotlin:0.16.0") ``` ## Quick Start diff --git a/versioned_docs/version-0.16/guide/scala/index.md b/versioned_docs/version-0.16/guide/scala/index.md index 60976534b3..f99782d544 100644 --- a/versioned_docs/version-0.16/guide/scala/index.md +++ b/versioned_docs/version-0.16/guide/scala/index.md @@ -48,7 +48,7 @@ See [Java Features](../java/index.md#features) for complete feature list. Add the dependency with sbt: ```sbt -libraryDependencies += "org.apache.fory" %% "fory-scala" % "0.15.0" +libraryDependencies += "org.apache.fory" %% "fory-scala" % "0.16.0" ``` ## Quick Start diff --git a/versioned_docs/version-0.16/guide/xlang/getting-started.md b/versioned_docs/version-0.16/guide/xlang/getting-started.md index 53537d322d..e6a4964ffe 100644 --- a/versioned_docs/version-0.16/guide/xlang/getting-started.md +++ b/versioned_docs/version-0.16/guide/xlang/getting-started.md @@ -31,14 +31,14 @@ This guide covers installation and basic setup for cross-language serialization <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-core</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` **Gradle:** ```gradle -implementation 'org.apache.fory:fory-core:0.15.0' +implementation 'org.apache.fory:fory-core:0.16.0' ``` ### Python diff --git a/versioned_docs/version-0.16/introduction/benchmark.md b/versioned_docs/version-0.16/introduction/benchmark.md index 64727d459c..195418881d 100644 --- a/versioned_docs/version-0.16/introduction/benchmark.md +++ b/versioned_docs/version-0.16/introduction/benchmark.md @@ -53,6 +53,36 @@ Fory C++ demonstrates competitive performance compared to Protobuf C++ serializa <img src="/img/benchmarks/cpp/throughput.png" width="90%"/> +## Go Benchmark + +Fory Go demonstrates strong performance compared to Protobuf and Msgpack across +single-object and list workloads. + +<img src="/img/blog/fory_0_16_0_release/go_benchmark_combined.png" width="90%"/> + +Note: Results depend on hardware, dataset, and implementation versions. See the +Go benchmark report for details: https://fory.apache.org/docs/benchmarks/go/ + +## C# Benchmark + +Fory C# demonstrates strong performance compared to Protobuf and Msgpack across +typed object serialization and deserialization workloads. + +<img src="/img/blog/fory_0_16_0_release/csharp_benchmark_combined.png" width="90%"/> + +Note: Results depend on hardware and runtime versions. See the C# benchmark +report for details: https://fory.apache.org/docs/benchmarks/csharp/ + +## Swift Benchmark + +Fory Swift demonstrates strong performance compared to Protobuf and Msgpack +across both scalar-object and list workloads. + +<img src="/img/blog/fory_0_16_0_release/swift_benchmark_combined.png" width="90%"/> + +Note: Results depend on hardware and runtime versions. See the Swift benchmark +report for details: https://fory.apache.org/docs/benchmarks/swift/ + ## JavaScript Benchmark <img width="50%" alt="" src="/img/benchmarks/javascript/complex_object.jpg" /> diff --git a/versioned_docs/version-0.16/start/install.md b/versioned_docs/version-0.16/start/install.md index 951a42fbdc..9f73a9c5d2 100644 --- a/versioned_docs/version-0.16/start/install.md +++ b/versioned_docs/version-0.16/start/install.md @@ -16,7 +16,7 @@ To add a dependency on Apache Fory™ using Maven, use the following: <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-core</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> <!-- Optional row format support --> <!-- @@ -44,7 +44,7 @@ To add a dependency on Apache Fory™ scala for scala 2.13 with maven, use the f <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-scala_2.13</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` @@ -54,20 +54,20 @@ To add a dependency on Apache Fory™ scala for scala 3 with maven, use the foll <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-scala_3</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` To add a dependency on Apache Fory™ scala for scala 2.13 with sbt, use the following: ```sbt -libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "0.15.0" +libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "0.16.0" ``` To add a dependency on Apache Fory™ scala for scala 3 with sbt, use the following: ```sbt -libraryDependencies += "org.apache.fory" % "fory-scala_3" % "0.15.0" +libraryDependencies += "org.apache.fory" % "fory-scala_3" % "0.16.0" ``` ## Kotlin @@ -78,7 +78,7 @@ To add a dependency on Apache Fory™ kotlin with maven, use the following: <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-kotlin</artifactId> - <version>0.15.0</version> + <version>0.16.0</version> </dependency> ``` @@ -86,7 +86,7 @@ To add a dependency on Apache Fory™ kotlin with maven, use the following: ```bash python -m pip install --upgrade pip -pip install pyfory==0.15.0 +pip install pyfory==0.16.0 ``` ## Rust @@ -99,7 +99,7 @@ fory = "0.14" or just execute command: ```bash -cargo add [email protected] +cargo add [email protected] ``` ## JavaScript --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
