Supporting unique vectors was one of the reason I went with this route. Since it has a header it is no longer a homogenous data structure and using a slice like API would be awkward (but not impossible).

Unique could be written using a slice like API as long as the offset pointer was kept and used for byte level offsets. The header is wrapped in a slice before reading or writing, Then the body is read separately. This would not work for Put since clCreateBuffer only allows one pointer and one length.