C++ 序列化指南
Apache Fory™ 是一个极速的多语言序列化框架,基于 JIT 编译和零拷贝技术,在保持易用性和安全性的同时提供超高性能。
C++ 实现利用现代 C++17 特性和模板元编程,提供具有编译时类型安全的高性能序列化。
为什么选择 Apache Fory™ C++?
- 🔥 极速性能:快速序列化和优化的二进制协议
- 🌍 跨语言:在 Java、Python、C++、Go、JavaScript 和 Rust 之间无缝序列化/反序列化数据
- 🎯 类型安全:基于宏的结构体注册实现编译时类型检查
- 🔄 引用跟踪:自动跟踪共享引用和循环引用
- 📦 Schema 演化:兼容模式支持独立的 schema 变更
- ⚡ 双格式支持:对象图序列化和零拷贝行格式
- 🧵 线程安全:同时提供单线程(最快)和线程安全两种变体
安装
C++ 实现同时支持 CMake 和 Bazel 构建系统。
前置条件
- CMake 3.16+(用于 CMake 构建)或 Bazel 8+(用于 Bazel 构建)
- C++17 兼容的编译器(GCC 7+、Clang 5+、MSVC 2017+)
使用 CMake(推荐)
使用 CMake 的 FetchContent 模块是最简单的方式:
cmake_minimum_required(VERSION 3.16)
project(my_project LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
FetchContent_Declare(
fory
GIT_REPOSITORY https://github.com/apache/fory.git
GIT_TAG v0.14.1
SOURCE_SUBDIR cpp
)
FetchContent_MakeAvailable(fory)
add_executable(my_app main.cc)
target_link_libraries(my_app PRIVATE fory::serialization)
然后构建并运行:
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel
./my_app
使用 Bazel
在项目根目录创建 MODULE.bazel 文件:
module(
name = "my_project",
version = "1.0.0",
)
bazel_dep(name = "rules_cc", version = "0.1.1")
bazel_dep(name = "fory", version = "0.14.1")
git_override(
module_name = "fory",
remote = "https://github.com/apache/fory.git",
commit = "v0.14.1", # 或使用特定的 commit hash 以确保可重现性
)
为应用程序创建 BUILD 文件:
cc_binary(
name = "my_app",
srcs = ["main.cc"],
deps = ["@fory//cpp/fory/serialization:fory_serialization"],
)
然后构建并运行:
bazel build //:my_app
bazel run //:my_app