您现在的位置是:首页 > 文章详情

Rust 终于来了!Apache Fory 0.13.0 发布 + 无缝替代 Python Pickle

日期:2025-10-31点击:18

🚀 Apache Fory 0.13.0 重磅发布! 这一版本带来两大震撼更新:

  • • Rust 首个正式版本 :完整高性能序列化栈、Dynamic Trait Object、多集合支持与 Schema 演进能力,让静态语言拥有动态序列化的灵活性。  在性能测试中,比 JSON/Protobuf 快最多 10 倍,压缩率媲美 Protobuf。

  • • Python Pickle 全面替代方案 :无缝兼容 pickle/cloudpickle API,同时做到 更快⚡、更小📦、更安全,支持本地函数/类、lambda、零拷贝 NumPy/Pandas 等高级场景。

无论是跨语言服务还是单语言优化,Fory 都能让数据传输更高效、更可靠。  立即升级,体验 Rust 与 Python 序列化的全新时代!

亮点 🚀

  • • 🧠 Rust 的 Dynamic Trait Object 序列化

  • • 🔁 Rust 的 Shared/Circular ownership 序列化

  • • 🔮 Rust 的 Schema Forward/Backward compatibilify

  • • 🐍 Python pickle 的 Drop-in Replacement:支持本地函数/类/__reduce__/__getstate__ 序列化

  • • 🧾 支持 Python dataclass Schema 向前向后兼容性

  • • ☕️ Java xlang 模式支持 jit codegen,加速跨语言序列化性能

  • • ⚙️ 使用 SIMD 的 primitive array compression,大幅压缩数组的序列化体积

  • • 📦 Row Format 新增 Compact Row Codec,编码压缩率提升50%

  • • 🐹 支持Go Struct Schema 向前向后兼容性

  • • 🚀 Golang struct 序列化 的 ahead-of-time codegen,加速 Golang 序列化性能

Rust:首个发布亮点 🦀

这是 Apache Fory 首个 Rust 正式版本,带来完整、高性能的序列化栈。如果你正在构建 Rust 服务或库,现在可以在强类型、性能和 schema 演进方面原生使用 Fory。

  • • 通过 #[derive(ForyObject)] 实现 derive-based object graph serialization

  • • 支持 trait objects 的多态:Box<dyn Trait>Rc<dyn Trait>Arc<dyn Trait>,以及 dyn Any

  • • Rc/Arc 与 RcWeak/ArcWeak 的共享与循环引用追踪

  • • 提供向前/向后兼容的 schema 演进(Compatible 模式)

  • • 借助 #[derive(ForyRow)] 和按需字段访问,实现零拷贝 Row format

  • • 线程安全并支持多线程序列化(context pool)

  • • 广泛的集合支持(例如 VecDequeLinkedListBTreeMapBTreeSetBinaryHeap

快速上手(最小示例):

use fory::{Fory, Error};
use fory::ForyObject;

#[derive(ForyObject, Debug, PartialEq)]
struct User {
    name: String,
    age: i32,
    email: String,
}

fn main() -> Result<(), Error> {
    let mut fory = Fory::default();
    fory.register::<User>(1)?;

    let user = User { name: "Alice".into(), age: 30, email: "alice@example.com".into() };
    let bytes = fory.serialize(&user)?;
    let decoded: User = fory.deserialize(&bytes)?;
    assert_eq!(user, decoded);
    Ok(())
}
  • • 指南:Rust Serialization – https://fory.apache.org/docs/docs/guide/rust_serialization

  • • Crate:fory on crates.io – https://crates.io/crates/fory

  • • API 文档:docs.rs – https://docs.rs/fory/latest/fory

Rust 基准测试 📊

下表展示了在多个数据集和规模上,Fory 与 JSON、Protobuf 的序列化吞吐量(TPS,越高越好)对比,结果表面 Fory 性能是 Protobuf/JSON的10倍以上:

序列化结果大小跟 Protobuf Rust 持平:

data type

data size

fory

protobuf

e-commerce-data

small

750

737

e-commerce-data

medium

53275

58025

e-commerce-data

large

1079358

1166878

system-data

small

311

315

system-data

medium

24301

26161

system-data

large

450031

479988

注意:结果会受到硬件、数据集和实现版本的影响。参阅 Rust 指南了解如何自行运行基准测试:https://github.com/apache/fory/blob/main/rust/benches/README.md

Python:pickle 的替代方案 🐍

pyfory 现在是一款高性能的 pickle/cloudpickle Drop-in Replacement,同时保持一致的简洁 API,并增强安全性与性能。

  • • 在 Python-native 模式(xlang=False)下序列化任意 Python 对象:全局/本地函数、lambdas、全局/本地类、实例/类/静态方法

  • • 遵循 Python 钩子:__getstate____setstate____reduce____reduce_ex__

  • • 通过 ref=True 提供共享/循环对象图的引用追踪

  • • 借助协议 5 的 out-of-band buffers 和 pickle.PickleBuffer 实现零拷贝(如 NumPy、Pandas 等)

  • • 安全性:strict=True 支持基于注册的安全策略,DeserializationPolicy 提供精细化管控

  • • 线程:ThreadSafeFory 支持多线程安全使用

  • • 熟悉的 API:dumps/loads 是 serialize/deserialize 的别名

快速上手:

import pyfory

# Drop-in replacement for pickle/cloudpickle
fory = pyfory.Fory(xlang=False, ref=True, strict=False)

def make_multiplier(k):
    def mul(x):
        return k * x
    return mul

binary = fory.dumps(make_multiplier(10))
assert fory.loads(binary)(3) == 30

延伸阅读:Python Guide – https://fory.apache.org/docs/latest/python_serialization/

📦 快速开始

默认情况下会使用各语言的原生模式以获得最佳性能;只有在需要跨语言互通时,才将序列化模式切换为 xlang=true(或等效选项)。

Rust

[dependencies]
fory = "0.13"
use fory::{Error, Fory};
use fory::ForyObject;

#[derive(ForyObject, Debug, PartialEq)]
struct Person {
    name: String,
    age: i32,
}

fn main() -> Result<(), Error> {
    let mut fory = Fory::default();
    fory.register::<Person>(1)?;
    let bytes = fory.serialize(&Person { name: "Alice".into(), age: 30 })?;
    let decoded: Person = fory.deserialize(&bytes)?;
    assert_eq!(decoded.age, 30);
    Ok(())
}

Python

python -m pip install --upgrade pip
pip install pyfory==0.13.0
from dataclasses import dataclass
import pyfory

@dataclass
class Person:
    name: str
    age: pyfory.int32

fory = pyfory.Fory()
fory.register_type(Person)
payload = fory.serialize(Person(name="Alice", age=30))
decoded = fory.deserialize(payload)
print(decoded.name, decoded.age)

Java

<dependency>
  <groupId>org.apache.fory</groupId>
  <artifactId>fory-core</artifactId>
  <version>0.13.0</version>
</dependency>
import org.apache.fory.*;
import org.apache.fory.config.*;

public class QuickStart {
  public static class Person {
    String name;
    int age;

    Person(String name, int age) {
      this.name = name;
      this.age = age;
    }
  }

  public static void main(String[] args) {
    Fory fory = Fory.builder()
      .withLanguage(Language.JAVA)
      .requireClassRegistration(true)
      .build();
    fory.register(Person.class);
    byte[] bytes = fory.serialize(new Person("Alice", 30));
    Person result = (Person) fory.deserialize(bytes);
    System.out.println(result.name + " " + result.age);
  }
}

Scala

// SBT Scala 2.13
libraryDependencies += "org.apache.fory" % "fory-scala_2.13" % "0.13.0"
// SBT Scala 3
libraryDependencies += "org.apache.fory" % "fory-scala_3" % "0.13.0"
import org.apache.fory.Fory
import org.apache.fory.config.Language
import org.apache.fory.serializer.scala.ScalaSerializers

case class Person(name: String, age: Int)

object Example {
  def main(args: Array[String]): Unit = {
    val fory = Fory.builder()
      .withLanguage(Language.JAVA)
      .requireClassRegistration(true)
      .build()
    ScalaSerializers.registerSerializers(fory)
    fory.register(classOf[Person])
    val bytes = fory.serialize(Person("Alice", 30))
    val result = fory.deserialize(bytes).asInstanceOf[Person]
    println(s"${result.name} ${result.age}")
  }
}

Kotlin

<dependency>
  <groupId>org.apache.fory</groupId>
  <artifactId>fory-kotlin</artifactId>
  <version>0.13.0</version>
</dependency>
import org.apache.fory.Fory
import org.apache.fory.config.Language
import org.apache.fory.serializer.kotlin.KotlinSerializers

data class Person(val name: String, val age: Int)

fun main() {
    val fory = Fory.builder()
        .withLanguage(Language.JAVA)
        .requireClassRegistration(true)
        .build()
    KotlinSerializers.registerSerializers(fory)
    fory.register(Person::class.java)
    val bytes = fory.serialize(Person("Alice", 30))
    val result = fory.deserialize(bytes) as Person
    println("${result.name} ${result.age}")
}

Golang

package main

import (
    "fmt"

    forygo "github.com/apache/fory/go/fory"
)

type Person struct {
    Name string
    Age  int32
}

func main() {
    fory := forygo.NewFory(true)
    fory.Register(Person{}, 1)
    payload, _ := fory.Marshal(Person{Name: "Alice", Age: 30})
    var decoded Person
    fory.Unmarshal(payload, &decoded)
    fmt.Println(decoded.Name, decoded.Age)
}

JavaScript

import Fory, { Type } from "@apache-fory/fory";
import hps from "@apache-fory/hps";

const description = Type.object("example.Person", {
  name: Type.string(),
  age: Type.int32(),
});

const fory = new Fory({ hps });
const { serialize, deserialize } = fory.registerSerializer(description);
const payload = serialize({ name: "Alice", age: 30 });
const decoded = deserialize(payload);
console.log(decoded.name, decoded.age);

功能特性 ✨

  • • feat(java): 为 graalvm 支持 object stream 序列化 @chaokunyang,https://github.com/apache/fory/pull/2464

  • • refactor(java): 将抽象集合/映射序列化器重命名为 Map/ListLikeSerializer,by @chaokunyang,https://github.com/apache/fory/pull/2466

  • • feat(memory): 新增可定制的 MemoryAllocator interface,by @adriacabeza,https://github.com/apache/fory/pull/2467

  • • feat: 串联 wheel test/build 和 release workflows,by @esafak,https://github.com/apache/fory/pull/2483

  • • feat(python): 为 pyfory 将默认语言设为 python,by @chaokunyang,https://github.com/apache/fory/pull/2490

  • • feat(python): 为 python 新增 register api,by @chaokunyang,https://github.com/apache/fory/pull/2491

  • • feat(python): 为 python 提供 meta compression,by @chaokunyang,https://github.com/apache/fory/pull/2504

  • • feat(python): 为 python 提供 type meta encoding,by @chaokunyang,https://github.com/apache/fory/pull/2509

  • • feat(CI): Cache npm,新增 node 24 与 lock file,by @esafak,https://github.com/apache/fory/pull/2523

  • • feat(Rust): 实现 Type Compatible,by @urlyy,https://github.com/apache/fory/pull/2492

  • • feat(Rust): 在 MetaFieldType se/de 中支持 Option,by @urlyy,https://github.com/apache/fory/pull/2528

  • • feat(rust): 在 compatible 模式反序列化时支持 skipping fields bytes,by @urlyy,https://github.com/apache/fory/pull/2545

  • • feat(go): 为 meta share 新增 type meta encoding,by @junjiexh,https://github.com/apache/fory/pull/2554

  • • feat(Rust): 反序列化时支持 T 与 Option<T> 的自动转换,by @urlyy,https://github.com/apache/fory/pull/2563

  • • feat(java): bean encoder 实现的 interfaces 支持 @Ignore,by @stevenschlansker,https://github.com/apache/fory/pull/2576

  • • refactor(java): 重构 fory java exception hierarchical structure,by @chaokunyang,https://github.com/apache/fory/pull/2577

  • • feat(Go): 为 fory-go serialization 实现 ahead of time codegen,by @ThisingL,https://github.com/apache/fory/pull/2553

  • • feat(java): 支持限制 deserialization depth,by @chaokunyang,https://github.com/apache/fory/pull/2578

  • • feat(rust): 新增 fory rust benchmark,by @chaokunyang,https://github.com/apache/fory/pull/2583

  • • perf(rust): 优化 rust deserialize 性能,by @chaokunyang,https://github.com/apache/fory/pull/2584

  • • feat(rust): 新增 rust profiler for serialization,by @chaokunyang,https://github.com/apache/fory/pull/2588

  • • refactor(go): 将 FieldInfo 重命名为 FieldDef 以避免 name collision,by @junjiexh,https://github.com/apache/fory/pull/2594

  • • feat(python): 为 pyfory compatible serialization 提供 meta share mode,by @chaokunyang,https://github.com/apache/fory/pull/2593

  • • feat(java/python): 对齐 java 与 python 的 compatible mode serialization,by @chaokunyang,https://github.com/apache/fory/pull/2602

  • • feat(java/python): 支持 enum xlang serialization,by @chaokunyang,https://github.com/apache/fory/pull/2603

  • • feat(Rust): 支持与 java 对齐的 basic type se/de,by @urlyy,https://github.com/apache/fory/pull/2585

  • • perf(python/java): 修复并优化 cross-language meta-share mode,by @pandalee99,https://github.com/apache/fory/pull/2601

  • • feat(go): 对齐跨语言 primitive arrays 的 type serialization,by @pandalee99,https://github.com/apache/fory/pull/2610

  • • feat(java): 支持 xlang 模式的 codegen,by @chaokunyang,https://github.com/apache/fory/pull/2613

  • • feat(java): 使用 SIMD 的 primitive array compression,by @adriacabeza,https://github.com/apache/fory/pull/2485

  • • refactor(go): 使用 factory-based serializer registration 替换 globalTypeResolver,by @ThisingL,https://github.com/apache/fory/pull/2615

  • • feat(go): 使用 metashare mode 实现 compatible mode,by @junjiexh,https://github.com/apache/fory/pull/2607

  • • feat(java): 在被更新时支持 concurrent map serialization,by @chaokunyang,https://github.com/apache/fory/pull/2617

  • • feat(java): 支持在序列化集合时的 concurrent updates,by @chaokunyang,https://github.com/apache/fory/pull/2623

  • • feat(python): 支持限制 pyfory depth,by @chaokunyang,https://github.com/apache/fory/pull/2625

  • • feat(Rust): 排序 fields、支持 Enum、修复 read/write type_info 以及 type_meta en/decode,by @urlyy,https://github.com/apache/fory/pull/2630

  • • feat(python): 实现 pickle serialization 的 drop-in replacement,by @chaokunyang,https://github.com/apache/fory/pull/2629

  • • refactor(java): 重构 type resolver,by @chaokunyang,https://github.com/apache/fory/pull/2640

  • • feat(java): 为 comaptible mode 支持 type converters,by @chaokunyang,https://github.com/apache/fory/pull/2641

  • • refactor(java/python): 优化 collection header bitmap,by @chaokunyang,https://github.com/apache/fory/pull/2642

  • • feat(go): 在 metashare mode 中支持 collection、map 与 nested object,by @junjiexh,https://github.com/apache/fory/pull/2643

  • • feat(go): 为 fory-go codegen serialization 新增 slice 与 map 支持,by @ThisingL,https://github.com/apache/fory/pull/2638

  • • refactor(go): 将 codegen 注解从 //fory:gen 更名为 //fory:generate,by @ThisingL,https://github.com/apache/fory/pull/2648

  • • feat(rust): 支持 Map 与 register_by_name,by @urlyy,https://github.com/apache/fory/pull/2649

  • • feat(java): 支持 graalvm 25,by @chaokunyang,https://github.com/apache/fory/pull/2652

  • • feat(java): 在 xlang compatible mode 中支持反序列化未注册/不存在的类与字段,by @chaokunyang,https://github.com/apache/fory/pull/2655

  • • refactor(Rust): 重构 compile-time code,修复 named_enum,并修复 skip enum,by @urlyy,https://github.com/apache/fory/pull/2657

  • • feat(python): 支持本地 Python class serialization,by @chaokunyang,https://github.com/apache/fory/pull/2665

  • • refactor(go): 优化 collection header bitmap,by @junjiexh,https://github.com/apache/fory/pull/2656

  • • feat(python): 支持 class methods serialization,by @chaokunyang,https://github.com/apache/fory/pull/2670

  • • refactor(go): 在 codegen 中优化 collection header bitmap,by @ThisingL,https://github.com/apache/fory/pull/2676

  • • feat(rust): 支持 box serde for rust,by @chaokunyang,https://github.com/apache/fory/pull/2677

  • • feat(rust): 为 Rust Rc/Arc 支持 reference tracking,by @chaokunyang,https://github.com/apache/fory/pull/2678

  • • feat(python): 优化 python serialization api,by @chaokunyang,https://github.com/apache/fory/pull/2673

  • • refactor(Rust): 优化 api name,by @urlyy,https://github.com/apache/fory/pull/2671

  • • feat(rust): 支持 rust dyn trait object serialization,by @chaokunyang,https://github.com/apache/fory/pull/2691

  • • feat(rust): 为 box/arc/rc 支持 dyn any trait object serialization,by @chaokunyang,https://github.com/apache/fory/pull/2704

  • • feat(rust): 为 arc/rc<dyn T> 支持 shared reference tracking,by @chaokunyang,https://github.com/apache/fory/pull/2707

  • • feat(rust): 避免在同一 module 的多个 trait objects 中 downcast method 冲突,by @chaokunyang,https://github.com/apache/fory/pull/2708

  • • feat(rust): 为 arc/rc wrapper 新增 deref,by @chaokunyang,https://github.com/apache/fory/pull/2709

  • • refactor(rust): 将 rc/arc wrapper macro arms 统一为单一函数,by @chaokunyang,https://github.com/apache/fory/pull/2711

  • • perf(Rust): 使用 SIMD 进行字符串 se/de,by @urlyy,https://github.com/apache/fory/pull/2716

  • • feat(Rust): 支持 named_xx se/de、ext se/de,并新增 unittest,by @urlyy,https://github.com/apache/fory/pull/2712

  • • feat(rust): 支持 RcWeak/ArcWeak 以实现循环引用追踪,by @chaokunyang,https://github.com/apache/fory/pull/2714

  • • feat(rust): 支持限制 max dyn depth,by @chaokunyang,https://github.com/apache/fory/pull/2730

  • • feat(Rust): 解开字段循环并为其新增 feature,by @urlyy,https://github.com/apache/fory/pull/2724

  • • feat(python): 让 fory out-of-band serialization 兼容 pickle5,by @chaokunyang,https://github.com/apache/fory/pull/2732

  • • refactor(go): 替换 legacy RegisterTagType api 调用,by @junjiexh,https://github.com/apache/fory/pull/2696

  • • feat(python): 新增 thread safe fory,by @chaokunyang,https://github.com/apache/fory/pull/2735

  • • feat(rust): 支持 VecDeque/LinkedList serialization,by @chaokunyang,https://github.com/apache/fory/pull/2741

  • • feat(rust): 支持 btreemap serialization,by @chaokunyang,https://github.com/apache/fory/pull/2743

  • • feat(rust): 支持 btree set 与 binary heap serialization,by @chaokunyang,https://github.com/apache/fory/pull/2744

  • • feat(Rust): 引入 context_pool 以减少 context allocation,并支持 multi-thread se/de,by @urlyy,https://github.com/apache/fory/pull/2737

  • • feat(ci): 在 Python CI workflow 中缓存 Bazel binary,by @SanyamSuyal,https://github.com/apache/fory/pull/2745

  • • feat(rust): 通过 compile-time fields sort algorithm 重写 fory derive macro,生成更小更快的代码,by @chaokunyang,https://github.com/apache/fory/pull/2749

  • • feat(ci): 在 CI 中新增 maven cache 加速构建,by @chaokunyang,https://github.com/apache/fory/pull/2751

  • • feat(rust): 使用匹配分配字段 id 的 fast fory_read_compatible macro,by @chaokunyang,https://github.com/apache/fory/pull/2758

  • • refactor(rust): 使用 compatible bool 替代 enum 简化 API,by @chaokunyang,https://github.com/apache/fory/pull/2763

  • • feat(rust): 从 parsed cache 查询 type meta 加速反序列化,by @chaokunyang,https://github.com/apache/fory/pull/2764

  • • feat(java): 引入 Compact Row Codec,by @stevenschlansker,https://github.com/apache/fory/pull/2414

  • • feat(go): 为 meta share mode 新增 pointer field test,by @junjiexh,https://github.com/apache/fory/pull/2674

  • • feat(rust): 让 Serializer api 返回 Result,并以 Result 替换 panic/expect/assert/unwrap,by @urlyy,https://github.com/apache/fory/pull/2765

  • • feat(rust): 重构 rust serialization system,by @chaokunyang,https://github.com/apache/fory/pull/2774

  • • feat(python): 为 dataclass fields 支持 optional typehint,by @chaokunyang,https://github.com/apache/fory/pull/2766

  • • feat(rust): 实现 dynamic rust serializer system,by @chaokunyang,https://github.com/apache/fory/pull/2778

  • • feat(rust): 使用 rc 替换 arc 存储 type meta 以提升性能,by @chaokunyang,https://github.com/apache/fory/pull/2782

  • • feat(python): 为 python native mode 的 dataclass 提供 compatible mode,by @chaokunyang,https://github.com/apache/fory/pull/2784

  • • feat(java): 在反序列化未存在的 enum variant 时支持回退到 default,by @chaokunyang,https://github.com/apache/fory/pull/2787

  • • feat(go): 更新 codegen field 排序,生成更小、更快的代码,by @ThisingL,https://github.com/apache/fory/pull/2779

  • • feat(rust): 让 type meta resolve 直接返回 type info,by @chaokunyang,https://github.com/apache/fory/pull/2789

  • • perf(Rust): 在 MetaStringResolver 中移除 MetaString/MetaStringBytes 的 clone()/to_owned(),提升性能,并修复 xlang 测试,by @urlyy,https://github.com/apache/fory/pull/2791

  • • feat(rust): 支持 rust 的 static struct version hash check,by @chaokunyang,https://github.com/apache/fory/pull/2793

  • • feat(rust): 支持在 rust benchmark 中为所有数据类型生成 profile,by @chaokunyang,https://github.com/apache/fory/pull/2801

  • • perf(rust): 通过移除 copy simd 并添加更多 inline hints 优化 rust 性能,by @chaokunyang,https://github.com/apache/fory/pull/2807

  • • perf(rust): 始终以 utf8 写入字符串,by @chaokunyang,https://github.com/apache/fory/pull/2809

  • • feat(python): 新增 deserialization policy,以便更细粒度地控制与审计反序列化行为,by @chaokunyang,https://github.com/apache/fory/pull/2811

  • • perf(Rust): 提升性能,by @theweipeng,https://github.com/apache/fory/pull/2810

  • • feat(Rust): 支持 serialize_to,by @theweipeng,https://github.com/apache/fory/pull/2822

  • • feat(rust): 延迟构建 rust 的 typeinfo,避免嵌套 struct register 依赖,by @chaokunyang,https://github.com/apache/fory/pull/2824

  • • perf(Rust): 重构 reader,by @theweipeng,https://github.com/apache/fory/pull/2826

  • • perf(python): 优化 pyfory 性能,by @chaokunyang,https://github.com/apache/fory/pull/2829

Bug 修复 🛠️

  • • fix(java): 修复 map/list element type 与 collection type 相同导致的 jit 错误,by @chaokunyang,https://github.com/apache/fory/pull/2465

  • • fix(python): 修复 gh action pypi 发布流程,by @chaokunyang,https://github.com/apache/fory/pull/2468

  • • fix(java): 修复 private struct 的 row encoder,by @chaokunyang,https://github.com/apache/fory/pull/2469

  • • fix(python): 修复 pyfory pypi 发布,by @chaokunyang,https://github.com/apache/fory/pull/2473

  • • fix(python): 修复 macos 13 上的 py 发布,by @chaokunyang,https://github.com/apache/fory/pull/2478

  • • fix(ci): 使用 manylinux2014 中的 interpreters 构建 python wheels,by @esafak,https://github.com/apache/fory/pull/2486

  • • fix(java): 让 Encoders.mapEncoder(TypeRef, TypeRef, TypeRef, Fory) 加载 bean classes,by @stevenschlansker,https://github.com/apache/fory/pull/2494

  • • fix(java): 解决 row format generated bean types 处理 Optional 的问题,by @stevenschlansker,https://github.com/apache/fory/pull/2497

  • • fix: 修复 addListener 不释放锁的问题,by @open-snail,https://github.com/apache/fory/pull/2500

  • • fix(ci): 在 $ROOT/dist 中分发 wheel,by @esafak,https://github.com/apache/fory/pull/2506

  • • fix(python): 修复 workflow 的 publich tag,by @chaokunyang,https://github.com/apache/fory/pull/2517

  • • fix(ci): 打印 workflow head branch,by @chaokunyang,https://github.com/apache/fory/pull/2518

  • • fix(python): 修复 release python wheel head_branch tag,by @chaokunyang,https://github.com/apache/fory/pull/2519

  • • fix(java): 修复 MemoryBuffer tests 在 size 为零的 buffer 上验证 equalTo 的问题,by @stevenschlansker,https://github.com/apache/fory/pull/2524

  • • fix(ci): 将 tag 传给 bump_py_version,并在 manylinux 容器内设置 PLAT,by @esafak,https://github.com/apache/fory/pull/2522

  • • fix(ci): 在 Windows 使用 ref_name tag,命名 release runs,验证 wheel 版本,并在发布中使用所有 python 版本,by @esafak,https://github.com/apache/fory/pull/2532

  • • ci: 修复 verify_version() 捕获版本的方式,by @esafak,https://github.com/apache/fory/pull/2535

  • • fix(python): 修复 bump_wheel version,by @chaokunyang,https://github.com/apache/fory/pull/2534

  • • fix(python): 修复 bump version,by @chaokunyang,https://github.com/apache/fory/pull/2536

  • • fix(python): 新增 macos 13 发布,by @chaokunyang,https://github.com/apache/fory/pull/2538

  • • fix(ci): 为 betahuhn/repo-file-sync-action 使用小写,by @chaokunyang,https://github.com/apache/fory/pull/2541

  • • fix(ci): 为 repo-file-sync-action 使用 commit hash,by @chaokunyang,https://github.com/apache/fory/pull/2542

  • • fix(java): 修复 array encoder 在 encode(T) 中浪费 8 字节的问题,by @stevenschlansker,https://github.com/apache/fory/pull/2551

  • • fix(ci): 在 golang xlang tests 中安装 pyfory,by @esafak,https://github.com/apache/fory/pull/2561

  • • fix(ci): 在 run_ci.py 中使用子进程返回码退出,by @esafak,https://github.com/apache/fory/pull/2560

  • • fix(java): 修复 codegen name conflict,by @chaokunyang,https://github.com/apache/fory/pull/2565

  • • fix(java): 修复 graalvm 的 classinfo npe,by @chaokunyang,https://github.com/apache/fory/pull/2572

  • • fix(java): 如果 checkClassVersion 为 false,则跳过 classVersionHash 计算,by @theigl,https://github.com/apache/fory/pull/2573

  • • fix(java): 为 abstract field type 跳过 hash 计算,by @chaokunyang,https://github.com/apache/fory/pull/2575

  • • fix(java): 修复 row format buffer recycling 在 null 值时保留 offset 和 size 的问题,by @stevenschlansker,https://github.com/apache/fory/pull/2540

  • • fix(java): 修复 xlang register type by id,by @chaokunyang,https://github.com/apache/fory/pull/2591

  • • fix(java): 修复 java 的 xlang mode meta shared,by @chaokunyang,https://github.com/apache/fory/pull/2592

  • • fix(python): 修复 pyfory 构建依赖失败,by @pandalee99,https://github.com/apache/fory/pull/2596

  • • fix(python): 删除 typedef 中的冗余代码,by @pandalee99,https://github.com/apache/fory/pull/2600

  • • fix(java): 修复 xlang metashare mode 的 register by id,by @chaokunyang,https://github.com/apache/fory/pull/2614

  • • fix(java/python): 修复 meta string encoding 顺序,by @chaokunyang,https://github.com/apache/fory/pull/2616

  • • fix(go): 在 factory-based serializer system 中完善 type registration,by @ThisingL,https://github.com/apache/fory/pull/2619

  • • fix(python): 修复 pyfory depth limit,by @chaokunyang,https://github.com/apache/fory/pull/2626

  • • fix(java): 修复 codegen 获取 nested genericType,by @chaokunyang,https://github.com/apache/fory/pull/2632

  • • fix(python): 注册 dynamic serializer 时取消 registration 要求,by @chaokunyang,https://github.com/apache/fory/pull/2634

  • • fix(java): 修复 graalvm25 上的 record serialization,by @chaokunyang,https://github.com/apache/fory/pull/2644

  • • fix(java): 修复 xlang 的 field converter,by @chaokunyang,https://github.com/apache/fory/pull/2654

  • • fix(java): 修复 graalvm 上 array serialization,by @chaokunyang,https://github.com/apache/fory/pull/2664

  • • fix(java): 修复注册时的 meta share deserialization,by @chaokunyang,https://github.com/apache/fory/pull/2667

  • • fix(java): 在 graalvm native images 中保留 serializers,by @gudzpoz,https://github.com/apache/fory/pull/2680

  • • fix(java): 修复 graalvm 不使用 generated serializer 的问题,by @chaokunyang,https://github.com/apache/fory/pull/2682

  • • fix(java): 修复 java 中 xlang serializer 注册,by @chaokunyang,https://github.com/apache/fory/pull/2683

  • • fix(java): 修复 InputStream 读取大 buffer 的错误,by @wuwangben,https://github.com/apache/fory/pull/2687

  • • fix(python): 修复 python module/type serialize,by @chaokunyang,https://github.com/apache/fory/pull/2688

  • • fix(java): 修复 CollectionSerializersTest#tesPriorityQueueSerializer 的不稳定性,by @swj20010308,https://github.com/apache/fory/pull/2693

  • • fix(java): 修复 LazyMapTest#testMap 的不稳定性,by @swj20010308,https://github.com/apache/fory/pull/2692

  • • fix(java): 修复 EXT type 反序列化错误,by @mengnankkkk,https://github.com/apache/fory/pull/2700

  • • fix(java): 修复 xlang typedef encode,by @chaokunyang,https://github.com/apache/fory/pull/2719

  • • fix(java): 修复 MetaContextTest#testShareClassName 与 #testShareClassDefCompatible 的不稳定性,by @swj20010308,https://github.com/apache/fory/pull/2739

  • • fix(java): 修复 ForyCopyTest#mutableObjectCopyTest 的不稳定性,by @swj20010308,https://github.com/apache/fory/pull/2738

  • • fix(ci): 为 Bazel 下载新增重试逻辑以避免 flaky CI,by @SanyamSuyal,https://github.com/apache/fory/pull/2733

  • • fix(java): 在 xlang mode 中序列化只包含 null 元素的集合,by @mymde,https://github.com/apache/fory/pull/2740

  • • fix(ci): 修复 sync file,by @chaokunyang,https://github.com/apache/fory/pull/2750

  • • fix(ci): 修复 sync files,by @chaokunyang,https://github.com/apache/fory/pull/2752

  • • fix(docs): 修复 rust 文档链接构建与检查,by @chaokunyang,https://github.com/apache/fory/pull/2753

  • • fix(java): 修复 maven cache,by @chaokunyang,https://github.com/apache/fory/pull/2755

  • • fix(rust): 修复 rust xlang tests,by @chaokunyang,https://github.com/apache/fory/pull/2788

  • • fix(java): 修复 CollectionSerializersTest#testCollectionFieldSerializers、CollectionSerializersTest#testCollectionFieldSerializersCopy 与 ProtocolInteroperabilityTest#testComplexCollection 的不稳定性,by @swj20010308,https://github.com/apache/fory/pull/2790

  • • fix(java): 修复 java shanpshot version,by @chaokunyang,https://github.com/apache/fory/pull/2800

  • • fix(go): 调整 nullable value 的序列化以对齐 python 行为,by @junjiexh,https://github.com/apache/fory/pull/2814

其他改进 🔧

  • • chore(python): 禁用 pyfory.format import warning,by @chaokunyang,https://github.com/apache/fory/pull/2476

  • • chore: 将 release version 升级到 0.12.0,by @chaokunyang,https://github.com/apache/fory/pull/2489

  • • docs: 修复 meta_size_mask,by @urlyy,https://github.com/apache/fory/pull/2495

  • • chore: 修复错别字,by @Asnowww,https://github.com/apache/fory/pull/2496

  • • docs: 改进 pyfory PyPI 文档,by @esafak,https://github.com/apache/fory/pull/2498

  • • docs(python): 新增 row format 文档,by @chaokunyang,https://github.com/apache/fory/pull/2499

  • • chore: 将中文注释翻译成英语,by @Asnowww,https://github.com/apache/fory/pull/2503

  • • docs: 改进 pull request template,by @esafak,https://github.com/apache/fory/pull/2508

  • • ci: 修复 Windows wheel creation,by @esafak,https://github.com/apache/fory/pull/2511

  • • ci: 将 GH token 传递给 actions/download-artifact,by @esafak,https://github.com/apache/fory/pull/2514

  • • chore: 修复 MetaStrEncoding,by @co63oc,https://github.com/apache/fory/pull/2516

  • • chore(javascript): 将 foryjs 更名为 apache-fory 并移除 install docs,by @chaokunyang,https://github.com/apache/fory/pull/2544

  • • chore: 将 release version 升级到 0.12.1,by @chaokunyang,https://github.com/apache/fory/pull/2556

  • • docs: 在 contributing.md 中新增 Rust lint 命令,by @urlyy,https://github.com/apache/fory/pull/2569

  • • chore(ci): 使用 str replace 加速 java version bump,by @chaokunyang,https://github.com/apache/fory/pull/2568

  • • docs(java): 新增 idea jdk11 usage config,by @chaokunyang,https://github.com/apache/fory/pull/2570

  • • docs(rust): 新增 rust document,by @chaokunyang,https://github.com/apache/fory/pull/2582

  • • chore: 将 release version 升级到 0.12.2,by @chaokunyang,https://github.com/apache/fory/pull/2589

  • • chore: 为 fory 名称新增 trademark,by @chaokunyang,https://github.com/apache/fory/pull/2590

  • • chore: 回滚 "fix(python): Fix the build dependency failure that occurred in pyfory",by @chaokunyang,https://github.com/apache/fory/pull/2597

  • • chore: 移除 homepage URL 中的斜杠,by @chaokunyang,https://github.com/apache/fory/pull/2604

  • • chore(go): 将所有 typ 替换为 type_,by @chaokunyang,https://github.com/apache/fory/pull/2612

  • • chore: 将 release version 升级到 0.12.3,by @chaokunyang,https://github.com/apache/fory/pull/2645

  • • docs: 新增 AGENT.md,提升 AI 编码效率,by @chaokunyang,https://github.com/apache/fory/pull/2646

  • • chore(rust): 移除 tag read/write,by @chaokunyang,https://github.com/apache/fory/pull/2681

  • • docs(python): 优化 python README 并补充详细文档,by @chaokunyang,https://github.com/apache/fory/pull/2689

  • • docs(python): 在 README 中更新 schema evolution 支持,by @chaokunyang,https://github.com/apache/fory/pull/2690

  • • docs: 修复 python README lint,by @chaokunyang,https://github.com/apache/fory/pull/2694

  • • docs(rust): 新增全面的 rust README 文档,by @chaokunyang,https://github.com/apache/fory/pull/2723

  • • docs(rust): 补充详尽的 rust API 文档与 README,by @chaokunyang,https://github.com/apache/fory/pull/2728

  • • docs: 将 rust 与 python 文档同步至 fory-site,by @chaokunyang,https://github.com/apache/fory/pull/2734

  • • docs(rust): 更新 rust roadmap,by @chaokunyang,https://github.com/apache/fory/pull/2754

  • • docs(rust): 修复 rust 文档的断链,by @chaokunyang,https://github.com/apache/fory/pull/2756

  • • docs(rust): 修复 rust 文档 lint,by @chaokunyang,https://github.com/apache/fory/pull/2757

  • • docs(go): 更新 README.md,by @junjiexh,https://github.com/apache/fory/pull/2675

  • • docs(rust): 新增 rust thread safety 与 troubleshooting 文档,by @chaokunyang,https://github.com/apache/fory/pull/2781

  • • chore(rust): 将 fory-tests 重命名为 tests,by @chaokunyang,https://github.com/apache/fory/pull/2783

  • • docs(rust): 更新 rust serializer trait 文档,by @chaokunyang,https://github.com/apache/fory/pull/2795

  • • chore: 修复 release error,by @chaokunyang,https://github.com/apache/fory/pull/2796

  • • chore(python): 重命名 numeric typehint,by @chaokunyang,https://github.com/apache/fory/pull/2808

  • • chore(rust): 重排 fory rust methods,by @chaokunyang,https://github.com/apache/fory/pull/2813

  • • docs(python): 优化 python 代码并新增 API 文档,by @chaokunyang,https://github.com/apache/fory/pull/2816

  • • chore(ci): 为 rust/c++ 移除 macos13 CI,by @chaokunyang,https://github.com/apache/fory/pull/2817

  • • chore(rust): 将 metastring 重命名为 meta_string,by @urlyy,https://github.com/apache/fory/pull/2812

  • • docs(rust): 新增 serialize_to API 文档,by @chaokunyang,https://github.com/apache/fory/pull/2825

  • • chore(Rust): Streamline code,by @theweipeng,https://github.com/apache/fory/pull/2828

  • • docs(rust): 将文档中的 serialize 更新为 deserialize,by @chaokunyang,https://github.com/apache/fory/pull/2830

  • • chore(Rust): 在 context.rs 中移除 new_from_fory,by @urlyy,https://github.com/apache/fory/pull/2831

新增贡献者 🙌

  • • @adriacabeza 在 https://github.com/apache/fory/pull/2467 完成首次贡献

  • • @Asnowww 在 https://github.com/apache/fory/pull/2496 完成首次贡献

  • • @open-snail 在 https://github.com/apache/fory/pull/2500 完成首次贡献

  • • @junjiexh 在 https://github.com/apache/fory/pull/2554 完成首次贡献

  • • @ThisingL 在 https://github.com/apache/fory/pull/2553 完成首次贡献

  • • @gudzpoz 在 https://github.com/apache/fory/pull/2680 完成首次贡献

  • • @wuwangben 在 https://github.com/apache/fory/pull/2687 完成首次贡献

  • • @swj20010308 在 https://github.com/apache/fory/pull/2693 完成首次贡献

  • • @mengnankkkk 在 https://github.com/apache/fory/pull/2700 完成首次贡献

  • • @SanyamSuyal 在 https://github.com/apache/fory/pull/2733 完成首次贡献

  • • @mymde 在 https://github.com/apache/fory/pull/2740 完成首次贡献

完整更新日志:https://github.com/apache/fory/compare/v0.12.3...v0.13.0

原文链接:https://www.oschina.net/news/380662/apache-fory-0-13-0-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章