Does D have too many features?
Don Clugston
dac at nospam.com
Mon Apr 30 05:44:43 PDT 2012
On 30/04/12 12:27, Manu wrote:
> On 30 April 2012 10:32, Don Clugston <dac at nospam.com
> <mailto:dac at nospam.com>> wrote:
>
> On 29/04/12 20:08, Manu wrote:
>
> On 29 April 2012 18:50, Don <nospam at nospam.com
> <mailto:nospam at nospam.com>
> <mailto:nospam at nospam.com <mailto:nospam at nospam.com>>> wrote:
>
>
> On 28.04.2012 20:47, Walter Bright wrote:
>
> Andrei and I had a fun discussion last night about this
> question. The
> idea was which features in D are redundant and/or do not add
> significant
> value?
>
> A couple already agreed upon ones are typedef and the
> cfloat,
> cdouble
> and creal types.
>
> What's your list?
>
>
> * The >>> operator, which does nothing except introduce bugs (It
> does NOT perform an unsigned shift).
>
>
> What does it do? I use this all over the place, I assumed it
> worked...
> maybe I have bugs?
>
>
> It works only for two types: int and long.
> For everything else, it is identical to >>
> So for short and byte, and in generic code, it's ALWAYS a bug.
>
>
> O_O
> Is that intentional? Or is it... a bug?
> I smiled when I saw >>> in the language, I appreciate its presence. It's
> not necessary, but it cuts down on some ugly explicit casting (which
> theoretically makes generic code simpler).
It's not a bug, it's a design flaw. The buggy behaviour is explicitly
tested in the test suite.
The problem is that the C promotion rules also apply, just as for >> and
<<. But they are fundamentally incompatible with unsigned shift.
So short and byte get promoted to int *by sign extension*,
then the int gets an unsigned shift.
Which means that the short or byte gets a signed shift instead of an
unsigned one.
I used to use >>> in my code, because as you say, it is a nice idea, but
after having a few bugs with short, and working out what the semantics
actually were, I suddenly realized it was a landmine, and I removed
every instance of it from my code.
(cast(ulong)x) >> 3 is safer than x >>> 3, unfortunately.
More information about the Digitalmars-d
mailing list