Code-generation library and tool for the BlitzBuffers serialization format
Project description
⚡BlitzBuffers
BlitzBuffers is a serialization format and code generator designed for lightning-fast conversion of data to and from byte buffers by utilizing direct serialization and deserialization.
Pros
- Very fast serialization and deserialization of data (see benchmarks).
- Cross-language support via code generation based on a given schema file.
- Simple, but powerful schema syntax featuring structs, enums, tagged unions, vectors, and strings.
- Zero-copy serialization and deserialization - directly reads from and writes to the buffer.
- Easy-to-use API via the generated code.
- Code generation via Python, which makes it simple to integrate into your workflow, instead of having to deal with executables or build steps of other projects.
Cons
- Unset fields take up space in the buffer.
- No easy schema versioning.
- Not many languages supported (yet).
- No endianness checks in C++ (yet) - only use it on little-endian machines.
Schema
The schema syntax and capabilities take inspiration from the Rust language.
Expand to see an example using the various constructs.
namespace game
enum EntityType {
Player
Neutral
Enemy
}
struct Position {
x: f32
y: f32
z: f32
}
struct Entity {
type: EntityType
name: string
hitpoints: u64
position: Position
traits: Trait[]
}
enum Trait {
Height(u16, u16),
Color {
red: u8
green: u8
blue: u8
alpha: u8
}
}
Installation
The code-generation tool can be installed via pip:
pip3 install blitzbuffers
Code generation
Code for the desired languages can be generated by calling the module directly. You can specify one or more languages in a single command-line:
python3 -m blitzbuffers <schema-path> [-l <language> <output-file-path>]
Available languages are currently: cpp, rust
Benchmarks
A few benchmarks showing the difference between blitzbuffers and other tools/libraries with similar functionality.
C++
Deserialization/usage is the same for blitzbuffers no matter the setup.
| Setup | Serialization | Deserialization/Usage (checked) | Roundtrip |
|---|---|---|---|
| Blitzbuffers (fixed) | 34.8 ns | 74.7 ns | 125 ns |
| Blitzbuffers (expanding) | 105 ns | 74.8 ns | 187 ns |
| Flatbuffers | 433 ns | 176 ns | 620 ns |
| alpaca | 218 ns | 479 ns | 717 ns |
Rust
Deserialization/usage is the same for blitzbuffers no matter the setup. Checked vs. unchecked, is whether the data buffer is verified before the data in it is used.
| Setup | Serialization | Deserialization/Usage (checked) | Deserialization/Usage (unchecked) |
|---|---|---|---|
| Blitzbuffers (fixed) | 77.3 ns | 181.4 ns | 116.8 ns |
| Blitzbuffers (expanding) | 141.1 ns | - | - |
| Blitzbuffers (raw first) | 593.8 ns | - | - |
| Blitzbuffers (raw storage) | 107.1 ns | - | - |
| Flatbuffers | 410.8 ns | 595.9 ns | 129.9 ns |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blitzbuffers-0.2.0.tar.gz.
File metadata
- Download URL: blitzbuffers-0.2.0.tar.gz
- Upload date:
- Size: 31.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c5fba89abe8a67f1fb52581511dd796fe18c0699c10faef85598c5c631f909f
|
|
| MD5 |
f2ab637b7a5df7091d88df4b4f5aec7b
|
|
| BLAKE2b-256 |
e10daca613a1ca43d4ba9c38269652a0b5a76ae7fe508784af339c2653f89fb0
|
File details
Details for the file blitzbuffers-0.2.0-py3-none-any.whl.
File metadata
- Download URL: blitzbuffers-0.2.0-py3-none-any.whl
- Upload date:
- Size: 40.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14c377604a670d2d27fe9564678ec446b46a50192c134cb885201a47bb89aaf4
|
|
| MD5 |
9e5f053776bb7811108e8414bd49fc50
|
|
| BLAKE2b-256 |
1761d8de4e5be0e3763d517a32234b45d4d280e7106fbb7ddd16debfd4e4e98c
|