top | item 47063807

Show HN: Fory C++ Serialization – Polymorphism, Circular Refs, 12x vs. Protobuf

3 points| chaokunyang | 11 days ago |fory.apache.org

Apache Fory's C++ serialization is our latest support for c++

Highlights:

1. Automatic idiomatic cross-language serializaton, no adapter layer, serialize in C++, deserialize in Python.

2. Polymorphism via smart pointers. Fory detects std::is_polymorphic<T> automatically. Serialize through a shared_ptr<Animal>, get a Dog* back — zero boilerplate.

3. Circular/shared reference tracking. Shared objects are serialized once and encoded as back-references. Cycles don't overflow the stack.

4. Schema evolution. Compatible mode matches fields by name/id, not position. Add fields on one side without coordinating deployments.

5. IDL compiler (optional). `foryc ecommerce.fdl --cpp_out ./gen` generates idiomatic code for every language from one schema. Supports union → std::variant, optional, ref → std::shared_ptr, weak refs, lists, maps.

6. Row format. O(1) random field access by index — useful for analytics workloads where you only read a few fields per record.

Throughput vs. Protobuf: up to 12x depending on workload.

GitHub: https://github.com/apache/fory

C++ docs: https://fory.apache.org/docs/guide/cpp

I’d really like critical feedback on API ergonomics, and production fit.

1 comment

order