At 10:35 AM 5/27/1999 0400, Ben Brosgol wrote:
>Interestingly, and as Robert may recall, Jean Ichbiah once proposed that Ada
>allow the international currency symbol as a unary operator symbol that was
>available for users to overload. JDI's idea was that it could serve as a
>lightweight notation for type conversions for userdefined types (typically
>unary "+" is used for that purpose). For various reasons his proposal was
>not accepted, which is probably a good thing given Robert's news that this
>symbol is being evicted from Latin1 to make room for the euro.
Two comments. First, I belive the current status is that 8859/1 has
been updated to include the Euro symbol, but the fixes to 10646 and ASCII
are still in the approval pipeline. I expect that patches and updates for
character set software is already reflecting the change, because the old
international currency symbol was never much used.
Second, it would have been fun if it had been available. In fact maybe
in the next Ada standard we can revisit this proposal with some other
characters. Using Unicode (or UTC) we could have loads of additional
operator symbols. Even staying within Latin1 provides lots of interesting
choices:
Left and Right Angle Quotations for labels.
Not sign as an alternative to "not".
Degree sign as a postfix operator.
Superscript two and three as (possibly static) aliases for
"**2" and "**3".
Division and Multiplication signs as binary operators with the obvious
default meanings. (Note: it would be nice to make them overloadable
separate from the existing multiply and divide operations for cases where
there are inner and outer products, and for different meanings of division
in modulo arithmetic.)
Or you could use Middle Dot for dot product, and multiplication sign
for cross product. ;)
What about the Plus and Minus sign? Did you ever want to write:
if X in Y +/ Delta then...
in place of
if X in Y + Delta..Y  Delta then...
especially when Delta is a function or expression you would like to
evaluate once. (Notice that the right sequence for evaluating this is not
easy for a nonpeephole optimizer to see, especially if Delta is really a
temp used because you want it evaluated once. Sometimes you can rewrite as:
if X  Y in Delta..Delta then...
but even then the compiler is unlikely to figure out the right code on
some hardware. (The nice choice on a machine with an inline abs operator is
load X
load Y
subtract
abs
load Delta
subtract
branch greater zero (around true part)
Only one branch, and a minimum number of loads. (I'm assuming that
there is no inline bounds checking needed at runtime...)
Robert I. Eachus
with Standard_Disclaimer;
use Standard_Disclaimer;
function Message (Text: in Clever_Ideas) return Better_Ideas is...
