Skip to main content

Code-generation library and tool for the BlitzBuffers serialization format

Project description

⚡BlitzBuffers

CI PyPI version

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

blitzbuffers-0.3.0.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

blitzbuffers-0.3.0-py3-none-any.whl (42.4 kB view details)

Uploaded Python 3

File details

Details for the file blitzbuffers-0.3.0.tar.gz.

File metadata

  • Download URL: blitzbuffers-0.3.0.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.0

File hashes

Hashes for blitzbuffers-0.3.0.tar.gz
Algorithm Hash digest
SHA256 9bbedb243efebf4dfdae6cea19068632361609eaf231990e887e94f1fe2a44c8
MD5 5577799311a3a4d84753d3eecc293138
BLAKE2b-256 8015aafbe63d5a199bf75bb58b0a56a4b9c3056343fd247d9183c853d5db754e

See more details on using hashes here.

File details

Details for the file blitzbuffers-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: blitzbuffers-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 42.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.0

File hashes

Hashes for blitzbuffers-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a75de18a17e55709ce509b94a4208bb1d411d79779ffa9de5c65c50ca46afec1
MD5 ece807d404518aee3150d8e47e7341e1
BLAKE2b-256 0ee99e887576fbc9412cc47de29a8b898cd31011cd487f6142e24295ce3bd7f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page