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.1.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.1-py3-none-any.whl (42.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: blitzbuffers-0.3.1.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.1.tar.gz
Algorithm Hash digest
SHA256 b0b9164ea9744c0061be9f1cdbd1ff4277f390372e77d038630999bfcce0be98
MD5 4d71d339925e15303a0cc716a952b0a7
BLAKE2b-256 02f955efcd13b90f91965e48d4ff69bccf140a38d03f0f0884c49a8fe22510db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: blitzbuffers-0.3.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ac5a096ef8ca89228abcac5b4ee8deef5d0db27dcb9a0378c7eecda575a04e0a
MD5 4a277a8d2e4f4f291b7c513b04a8b833
BLAKE2b-256 8c667a1d39c6b539c6f0274eaa0480c01aa58309ddf57db1947182c583b0ef3e

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