Skip to main content

Code-generation tool for the fast blitzbuffers serialization format

Project description

⚡BlitzBuffers

BlitzBuffers is a serialization and deserialization format and code-generator that makes it easy to interface with the underlying data.

The main purposes of BlitzBuffers is performance, versatility, and ease of use.

Pros

  • Blitzingly fast serialization and deserialization of binary buffers.
  • Cross-language support via code generation based on a given schema.
  • 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 is done by via Python, which makes it simpler to integrate into your workflow, instead of having to deal with executables or build steps of other projects.

Cons

  • No schema versioning.
  • Unset fields take up space in the buffer.
  • 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: OptionalByte
    }

}

Code generation

Via python:

python3 -m blitzbuffers <schema-path> [-l <language> <output-file-path>]

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.1.0.tar.gz (30.9 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.1.0-py3-none-any.whl (40.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for blitzbuffers-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cfcfe7543579f6910ee3c7bd7dce627653b75377478f914ef609184990a8bc5a
MD5 cce7aa656efb340dc3b32d157e48547d
BLAKE2b-256 968bcb741c55918c89d70d4c328b79df54fa55154f8adfabec5010f7d1ef7bfb

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for blitzbuffers-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7a174dacd9eebcdc9f6b410175388d5528b4a3483b9f89ea9285178c74666f8c
MD5 fc8f72fc95ae5bd600f2a404fb8adddf
BLAKE2b-256 462a1a709786364aca6b2e593e65e5f7d5ce849a34e521976565becaa67e056d

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