[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bit or byte?

Nice thing!

It is a controversial thing, but it is also important:

    Why is the smallest addressable unit in a blob an octet and not a bit?

We should think about the implications first, but I think it will be a great
benefit if this SRFI would be bit-accurate instead of byte-accurate.
The benefits of bit-accurate blobs are (among others):
1. They are occasionally useful as a data type themselves, e.g. for representing
subsets of a fixed finite set.
2. Many binary format specifications (e.g. in communication systems, networking,
image compression, ...) are specified in terms of not necessarily byte-aligned bit
fields. Implementing bit-accurate access on top of bytes is error prone and tedious.
(I know everything about that from communication system standards.)

The cost of being bit-accurate are as follows:
* Implementations might be tempted to represent the length as a FIXNUM. If
this is design is chosen, and immediate integers are 30-bits, the maximal blob is
just 64 MByte. This will very likely turn out to be a problem one day.
* The implementation is substantially complicated. In particular the COPY!
operation is not an easy thing to write if it is to be efficient. (I did do that for Ocaml.)
* Users might forget that they have to multiply the length by 8 to get bytes.

Note that the actual execution speed is unaffected since blob-operations that are
byte- or word-aligned can (and should) be recognized as special cases.