Andrei Alexandrescu wrote:
Lars T. Kyllingstad wrote:
Andrei Alexandrescu wrote:
Nice analysis. IMHO this should lead us to reconsider the necessity
of "^^" in the first place. It seems to be adding too little real
value compared to the complexity of defining it.
Andrei
It adds a lot of value to the ones that actually use it, even though
you may not be one of them. Exponentiation is extremely common in
numerics.
Well I write numerics and I do use exponentiation occasionally, but
never to the extent of yearning for ^^. "Extremely common" would be, I
think, quite difficult to argue.
Yeah, I get a little carried away. The point I was trying to make is
that it's not as uncommon as some would have it.
The fundamental reason why I want opPow so badly is in fact not even how
often I use it. If that was the case, I'd want a special "writefln"
operator as well. The main reason is that exponentiation is such a basic
mathematical operation, right up there with addition and multiplication,
that it deserves an operator of its own.
I also seem to remember someone (was it Don or bearophile, perhaps?)
listing various optimisation possibilities that are more readily
available if ^^ is a built-in operator.
Here are some statistics for you: A Google code search (see below) for
FORTRAN code using the power operator **, which until recently didn't
have a D equivalent, yields roughly 56100 results.
A search for the FORTRAN equivalents of << yield 400 results for ILS()
and 276 results for LSHIFT(). Yet, left shift apparently deserves a
place in D.
(I've used http://www.google.com/codesearch, with the following search
strings for **, ILS and LSHIFT, respectively:
[0-9a-zA-Z)]\*\*[0-9a-zA-Z(] lang:fortran
ils\([0-9a-zA-Z] lang:fortran
lshift\([0-9a-zA-Z] lang:fortran
As statistics go, this is probably not a prime example, but it is at
least an indication.)
Thanks for collecting the evidence. To make it more meaningful, you may
want to report it to the total number of lines of code searched. I don't
know how to do that with codesearch.
FWIW, this search:
[0-9a-zA-Z)]\*\*[013456789a-zA-Z(] lang:fortran
yields 30,300 results, meaning that almost half the uses of
exponentiation is to square things.
...which is still a valid use case, since foo*foo evaluates foo twice
and square(foo) is no better than pow(foo, 2).
So I'm not sure what this all is supposed to argue for or against. What
I can say is that Don's analysis suggested to me, let's leave all that
aggravation to overloads of pow() and call it a day. I was much more in
favor of ^^ before I saw how quickly it gets complicated. That kind of
stuff just doesn't strike me as the kind of things you put straight in
the core language.
You could say the same for arrays. T[new] and ~=, anyone? ;)
-Lars