Neat project: add pointer capability to std.bitmanip.bitfields

deadalnix via Digitalmars-d digitalmars-d at puremagic.com
Thu Dec 3 17:35:45 PST 2015


First it check for alignement. Considering this :

On Thursday, 3 December 2015 at 09:11:12 UTC, Vladimir Panteleev 
wrote:
> True, assuming that:
>
> 1. The pointers are still aligned at machine word boundaries

No. The pointer needs to be aligned as per underlying data type 
expectation. If it isn't aligned, the operation that produced 
this unaligned pointer must be unsafe, not the bitfield 
capability.

> 2. The underlying storage type is one that the GC will scan for 
> pointers (e.g. void or void*, not size_t/ubyte)

Yes, this one is not a problem currently, but can be (and in fact 
should be with a better GC). Hopefully, this is something I want 
to improve already and not a blocker considering the API, just an 
implementation detail.

> 3. The setters enforce that the discarded pointer bits were zero

If these bits aren't 0, the operation that set them to 1 is the 
one that is unsafe.

> 4. No more than 4 bits are reused (as the smallest GC object 
> size is 16 bytes)
>

Not correct. Considering the pointer is of type T*, then it is 
safe as long as align(T*) <= sizeof(T) which is correct on all 
architectures I know of (tho I wouldn't be surprised that some 
weird arch not used since the 70s may break this constraint).

The only valid concern here is 2. , but currently not a problem 
with the GC we have, and simply an implementation issue.


More information about the Digitalmars-d mailing list