Crate nota

source ·
Expand description

Nota: Not a pragmatic message format

Nota is a basic serialization format which doesn’t concern itself with interoperability with most programming languages. It’s almost as compact as MsgPack and CBOR, but lacks most features of the more mature alternatives. Nota is not well suited for high-performance parsing or serialization.

Nota uses its own string encoding, which isn’t UTF-8. Nota calls the binary float format used by literally every CPU and GPU today “obsolete”, and uses its own decimal-in-binary bignum format instead. Conversion of standard IEEE754 floats to Nota’s representaion is surprisingly difficult to perform losslessly, and it’s a process as inefficient as conversion of floats to strings.

Nota’s design prominently features a concept of continuation bits, but uses them inconsistently. Unlike terminators in CBOR, the continuation bits don’t nest, so Nota has to fall back to length+data approach, which prevents streaming serialization. It’s impossible to skip over records without parsing them. String lengths are in codepoints, not bytes, so they can’t be accurately preallocated ahead of time or skipped over without parsing, even if using Nota’s own string encoding instead of UTF-8.

Not a JSON

The spec defines only a subset of JSON’s types, and does not define how to deal with the rest of them.

Not a maintained project

This was an experiment to see if Nota was noteworthy, and it wasn’t. The first person to file a bug is the new maintainer.

Structs

  • DecimalFloatDeprecated
    Conversion from f32/f64 is going to be tricky, see the ryu crate.

Enums