Strict aliasing in D

monarch_dodra monarchdodra at gmail.com
Sat Aug 3 05:02:09 PDT 2013


On Saturday, 3 August 2013 at 11:39:44 UTC, David Nadlinger wrote:
> On Monday, 29 July 2013 at 05:05:54 UTC, Denis Shelomovskij 
> wrote:
>> So is enhancement request filed?
>
> Now it is: http://d.puremagic.com/issues/show_bug.cgi?id=10750
>
> Sorry, I'm not following the lists closely right now due to 
> university work.
>
> David

C++ (and C, afaik), solved the problem by saying "char" can alias 
anything. I'm not sure that's a good idea to do the same in D, 
since a char actually represents something very specific, and 
comes with bagage.

We could have (u)byte do this, but at the same time, I see now 
reason why *they* should have to pay for lax aliasing.

A "simple" solutions I see:

Introduce the "raw" basic data type. It's basically a ubyte for 
all intents and purposes, but can alias to anything. I think this 
is a good idea, as the useage of the ward "raw" is immediately 
very explicit and self documenting about what is going on:

auto rawSlice = (cast(raw*)(&arbitraryData))[0 .. 
arbitraryData.sizeof];

The *cost* here, of course, is the introduction of a new *type*. 
The cost is very high, but at the same type, it deals with the 
problem (I believe), in the most elegant fashion possible.

Thoughts?


More information about the Digitalmars-d mailing list