[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] Blobs vs. byte vectors
On Sun 22 May 2011 19:43, John Cowan <cowan@x> writes:
> My original view of blobs was as something that didn't have a native
> structure, but was just raw binary data. That's why I proposed the
> name "blob" rather than "byte/octet vector", which would imply a native
> structure of octets. In my view, blobs could be seen as octets, but
> equally well as 32-bit words in network (big-endian) order, or double
> complex numbers, or UTF-8 strings. All these interpretations are equal
> in BlobAPI.
This is all fine to me. For example this is what Guile does: you can
access bytevectors with the SRFI-4 accessors. There is a type bit
saying what the default interpretation should be, which is useful for
printing, for example. But you can do (bytevector-u16-ref (u32vector 0)
2 (endianness little)), and you get 0.
> For blobs in full generality, though, blob-map would make no sense
> because there was no unique element type for it to map over.
A fair point. However I still fail to get the difference relative to
R6RS bytevectors; e.g. you don't have bytevector-ref, it's
bytevector-u8-ref. So you could have bytevector-u8-map, the same as
blob-u8-map -- not that I think that's a useful operation of course ;-).
> So somehow the mental model issue has to be resolved, after which these
> details will just fall out naturally. If blobs are really u8 vectors
> and everything else is just an overlay, then blob-map, blob-for-each,
> etc. make sense. If all views of blobs are cognitively equal (which
> is how I really think), then they don't, and the restriction to a u8
> setter/getter is just to keep WG1 small.
It is a leaky abstraction, I think. For any unit which is not one byte
in length, you always have to be concerned about the size of the total
array. There's no way to treat (make-blob 5) as an array of u32 values.
How would a blob not be interpretable an array of bytes? It is implicit
in the type of `make-blob' that it's a bytes thing.
Scheme-reports mailing list