On Wed, Jul 16, 2025 at 01:29:01PM +0000, z via Digitalmars-d-learn wrote:
[...]
> I also see this in the language documentation :
> ```
> A void array cannot be indexed.
> ```
> But i can slice it just fine in DMD 2.111...

Probably an oversight.


> Is this by design or is there a hole in the language specification? By
> extension what the differences between `void`, `ubyte`, `void[]`,
> `ubyte[]` really? The language documentation doesn't appear to be
> explaining everything.
[...]

One important difference between void[] and ubyte[] is that void[] may
contain GC-scannable pointers, whereas ubyte[] is assumed to be pure
data.  This may be important if you're storing live pointers in a
buffer; if the buffer was allocated as a ubyte[], the GC might not scan
it for pointers and may incorrectly collect live objects. (Though I'm
not 100% sure the current GC implementation actually does this.)

Also, void means "no type", which is completely different from "ubyte",
which means an unsigned 8-bit integer.  Some introspection operations
like is(...) expressions return void when given an invalid expression,
whereas returning ubyte means the expression evaluates to an 8-bit
unsigned byte type.


T

-- 
What's a "hot crossed bun"? An angry rabbit.

Reply via email to