Re: Re: Unsigned Problems Revisited
| From: | Jason T. Greene | Date: | Tue, 29 Oct 2002 17:39:39 +0000 |
| Subject: | Re: Re: Unsigned Problems Revisited | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-90277@lists.php.net to get a copy of this message | ||
On Thu, 2002-10-24 at 09:51, David M. Lloyd wrote:
> On Thu, 24 Oct 2002, Andi Gutmans wrote:
>
> > At 02:49 PM 10/23/2002 -0500, David M. Lloyd wrote:
> >
> > >The reality of twos-complement, bitwise arithmatic is that there are
> > >three basic shift operations: shift left, bitwise shift right, and
> > >arithmetic shift right. This simple fact is one of the basic ideas of
> > >dealing with twos-complement integers.
> >
> > I know that but I still wanted the opposite to be available to keep
> > things symmetrical. I'm not sure but I think CPU's do support both
> > logical and arithmetic shifts and just do the same with both (I might be
> > wrong though).
>
> Generally no, it's a waste of opcode space for modern CISC processors.
> RISC processors often have integrated barrel-shifters, so they don't need
> shift instructions at all.
>
> Intel carries over "arithmetic" shift right instructions from older
> architetures for backwards-compatibility with x86, but their RISC
> implementation (Itanium) does not contain support for the operation.
>
> One RISC example is ARM. They give you four shift options: Logical left,
> logical right, arithmetic right, and rotate right. Making the operation
> symmetrical is a waste of precious bit combinations, and would have meant
> either losing another shift operation or else adding another bit to the
> shift operation specifier, which means that another bit would have to be
> sacrificed elsewhere.
>
> Another example is SPARC, which implements shifting with discrete
> instructions, only implents one left shift operator. PowerPC does not
> implement it either.
Alpha has 3 instructions as well (log left, log right, arith right)
> > >Given this fact, there is no reason to have a bogus fourth operator in the
> > >name of symmetry. Mathematical operaters are simply not always
> > >symmetrical. There is no such thing as 'arithmetic shift left' or
> > >'logical shift left' in terms of twos-complement integers, so why invent
> > >it?
> >
> > I agree that they don't *have* to be symmetrical but I think it's
> > better.
>
> Better why? Anyone who understands twos-complement will understand (and
> expect) the ability to do those three operations, and will not be
> surprised by the lack of two left shifts. I argue that they *should NOT*
> be symmetrical because it is wrong.
I have to say I agree, introducing a bogus operator could actually cause
confusion. Java, which has been used several times in past arguments of
"why we should not do XYZ", has not had a problem with having only the
operators that actually exist.
> > >Second of all, my understanding of the here-doc operator is that it acts
> > >as a unary operation. I don't see the conflict with the binary
> > >application of <<<, given the example of unary and binary -, if it is
> > >absolutely neccessary to fulfill the (somewhat psychotic) need for
> > >symmetry where it is not realy needed, or even strictly correct.
> >
> > psychotic? Can we please have discussions on a professional and not
> > personal level?
>
> It is true though, unless you can give me a sound mathematical reason that
> the ops should exist... and saying "it looks right" or "it is easier" is
> not a valid reason, becuase to those with even basic twos-complement math
> background, it looks wrong and is not easier.
>
> > As far as I remember it does clash with here-docs. I'm pretty sure I
> > thought of an example a while back. I can try and think of one again. In
> > any case, I wouldn't want an overloaded operator. We try and keep away
> > of that kind of stuff with PHP.
Clashing can occur with Constant values, and functions with a \n in
front of the ().
> Very well... then let's not put in the nonsense operator, and just have
> three shift operations: <<, >>, and >>>.
I agree
> - D
>
> <dmlloyd@tds.net>
>
>
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php
>
-Jason
--
Jason T. Greene <jason@inetgurus.net>
<jason@php.net>