mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 04:04:19 +00:00
This is a port of FlatBuffers to Rust. It provides code generation and a runtime library derived from the C++ implementation. It utilizes the Rust type system to provide safe and fast traversal of FlatBuffers data. There are 188 tests, including many fuzz tests of roundtrips for various serialization scenarios. Initial benchmarks indicate that the canonical example payload can be written in ~700ns, and traversed in ~100ns. Rustaceans may be interested in the Follow, Push, and SafeSliceAccess traits. These traits lift traversals, reads, writes, and slice accesses into the type system, providing abstraction with no runtime penalty.
3.3 KiB
3.3 KiB
Platform / Language / Feature support
FlatBuffers is actively being worked on, which means that certain platform / language / feature combinations may not be available yet.
This page tries to track those issues, to make informed decisions easier. In general:
- Languages: language support beyond the ones created by the original FlatBuffer authors typically depends on community contributions.
- Features: C++ was the first language supported, since our original target was high performance game development. It thus has the richest feature set, and is likely most robust. Other languages are catching up however.
- Platforms: All language implementations are typically portable to most platforms, unless where noted otherwise.
NOTE: this table is a start, it needs to be extended.
| Feature | C++ | Java | C# | Go | Python | JS | TS | C | PHP | Dart | Lobster | Rust |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Codegen for all basic features | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | WiP | Yes | Yes | Yes |
| JSON parsing | Yes | No | No | No | No | No | No | Yes | No | No | Yes | No |
| Simple mutation | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No |
| Reflection | Yes | No | No | No | No | No | No | Basic | No | No | No | No |
| Buffer verifier | Yes | No | No | No | No | No | No | Yes | No | No | No | No |
| Testing: basic | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes |
| Testing: fuzz | Yes | No | No | Yes | Yes | No | No | No | ? | No | No | Yes |
| Performance: | Superb | Great | Great | Great | Ok | ? | ? | Superb | ? | ? | Great | Superb |
| Platform: Windows | VS2010 | Yes | Yes | ? | ? | ? | Yes | VS2010 | ? | Yes | Yes | Yes |
| Platform: Linux | GCC282 | Yes | ? | Yes | Yes | ? | Yes | Yes | ? | Yes | Yes | Yes |
| Platform: OS X | Xcode4 | ? | ? | ? | Yes | ? | Yes | Yes | ? | Yes | Yes | Yes |
| Platform: Android | NDK10d | Yes | ? | ? | ? | ? | ? | ? | ? | Flutter | Yes | ? |
| Platform: iOS | ? | ? | ? | ? | ? | ? | ? | ? | ? | Flutter | Yes | ? |
| Engine: Unity | ? | ? | Yes | ? | ? | ? | ? | ? | ? | ? | No | ? |
| Primary authors (github) | aard* | aard* | ev*/js* | rw | rw | evanw/ev* | kr* | mik* | ch* | dnfield | aard* | rw |
- aard = aardappel (previously: gwvo)
- ev = evolutional
- js = jonsimantov
- mik = mikkelfj
- ch = chobie
- kr = krojew