On Thursday, 11 July 2019 at 19:35:50 UTC, Stefanos Baziotis
wrote:
On Thursday, 11 July 2019 at 18:46:57 UTC, Paul Backus wrote:
Casting from one type of pointer to another and slicing a
pointer are both @system, by design.
Yes, I'm aware, there are no pointers in the code. The pointer
was used
here because it was the only way to solve the problem (but not
in @safe).
What's the actual problem you're trying to solve? There may be
a different way to do it that's @safe.
I want to make an array of bytes that has the bytes of the
value passed.
For example, if T = int, then I want an array of 4 bytes that
has the 4
individual bytes of `s1` let's say. For long, an array of 8
bytes etc.
Ideally, that would work with `ref` (i.e. the bytes of where
the ref points to).
imho this cannot be safe on 1st principle basis. You gain access
to the machine representation of variable, which means you bypass
the "control" the compiler has on its data. Alone the endianness
issue is enough to have different behaviour of your program on
different implementations. While in practice big endian is nearly
an extinct species (, it is still enough to show why that
operation is inherently @system and should not be considered
@safe.
Of course, a @trusted function can be written to take care of
that, but that's in fact exactly the case as it should be.