On 10/4/13 3:26 PM, Stewart Gordon wrote:
On 04/10/2013 11:59, Denis Shelomovskij wrote:
Some of druntime/phobos code assumes it is one of little/big endianness others 
have
`static assert(0)` for third case. Lets clear the situation and make a decision.

Are you thinking of middle-endian orders such as 2,3,0,1?  Or just wondering in 
what situations
neither BigEndian nor LittleEndian would be set?

I suppose that most, if not all, 32+-bit machines are either big-endian or 
little-endian.  But
still, I imagine that the "third-case" is just a safeguard in case it is missed 
when somebody comes
across a middle-endian platform and tries to compile that code on it.  Or maybe 
it was just put in
out of belief that it is a good programming practice.

Endianness support as far as the D language is concerned doesn't seem to be 
clear-cut.
http://dlang.org/version.html
lists LittleEndian and BigEndian, but doesn't state that one of these will 
always be set.  So
middle-endian machines, if a D compiler exists for them, would use this "third 
case".  Further work
would be needed to determine what particular middle-endian order the machine 
implements for each
size of integer.  (Floating points are even more complicated, so I guess you 
can't rely on any
version flag to tell you about the format of these.)

OTOH, the platforms on which DMD runs are big-endian or little-endian.  If DMD 
is ported to a
middle-endian platform, or the DMD Phobos/druntime code is cribbed for use with 
a third-party D
compiler for a middle-endian machine, then the static assert will fire, thereby 
drawing attention to
this unimplemented functionality rather than silently generating code that 
won't work because it's
written for a little-endian machine, or for a big-endian machine.

Stewart.


Good answer. I'll add only one point: The use of the else static assert is a good way to catch a new platform that's one of little or big but fails to specify. If the code instead did if (little) {...} else {...}, the wrong choice would be potentially made. Better to require explicitness.

Reply via email to