comp.lang.ada
 help / color / mirror / Atom feed
From: John G. Volan <John_Volan@ccmail.dayton.saic.com>
Subject: Re: Side-effect arithmetic again [was: Ada ... in embedded systems]
Date: 1996/03/27
Date: 1996-03-27T00:00:00+00:00	[thread overview]
Message-ID: <4jbrs2$2n2@dayuc.dayton.saic.com> (raw)
In-Reply-To: 4j982l$cnh@usenet.srv.cis.pitt.edu

In article <EACHUS.96Mar25144123@spectre.mitre.org> 
Robert I. Eachus, eachus@spectre.mitre.org writes:

>    I felt that the range of Integer is large enough for most uses.
>In general I expect this package to be used with 1) enumeration types
>2) character types 3) loop indexes and 4) string indexes.

Two points:

- (2) is just a special case of (1). I could see your procedures going
into something like the Discrete_Arithmetic package I described, but
then I think the package ought to be called Enumeration_Arithmetic, to
emphasize the intent that the actual Item type be an enumeration.
  
- (3) and (4) might be enumerated types, but when they're integer types,
they could be supported more simply and directly by the
Integer_Arithmetic package I described.  No need to mix things up by
tying everything to Standard.Integer.
  
>  > Also, why limit Increment/Decrement to Positive?  Why not allow any
>  > arbitrary integer?  The C analogs for these procedures, += and -=,
>  > carry no such limitation.
>
>   Shrug.  I guess I could be convinced to Integer, but Inc(X, -1)
>seems silly.

If the following is legal in Ada:

    X := X + (-1);
    
then why should we presume to stop a programmer from doing:

    Increase (X, By => -1);
    
no matter how silly (we think) it is? 
    
And why do you assume that the second parameter to this procedure would
always be a (small) integer _literal_?  Given that you clearly are
making that assumption, I can understand how it wouldn't really matter
to you what type the second parameter was, so Standard.Integer is as
good as anything.  But this is what I mean by your focus being too
narrow. Here's a (somewhat) realistic example that overturns your
assumption:

    -- assume these are all the same type:
    Vertical_Acceleration := Gravity; -- happens to be negative (downward)
    Vertical_Velocity := ... ; -- could begin positive but ends up negative
    Altitude := ... ;
    ...
    while Altitude > 0 loop
        ...
        -- using a fast, but admittedly non-Newtonian, approximation, and
        -- assuming 1 unit (whatever that is) elapsed time between updates:
        
        Increase (Vertical_Velocity, By => Vertical_Acceleration);
        Increase (Altitude, By => Vertical_Velocity);
        ...
    end loop;
    Put_Line (">>CRUNCH!<<"); -- :-)
    
the C equivalent being:

        Vertical_Velocity += Vertical_Acceleration;
        Altitude += Vertical_Velocity;
            
Perhaps the words "Increase" and "Decrease" carry too much of a
connotation of directionality.  Perhaps we need better identifiers than
these to convey the sense of what += and -= really do.  Anybody have
any suggestions?

But on second thought, why isn't the second parameter on the "+" and "-"
functions limited to Positive?  Doesn't "addition" carry a sense of
making a value "bigger" and "subtraction" carry a sense of making a
value "smaller"?  Yet, despite these connotations, does anybody have
any trouble with the fact that you can _add_ a negative number and
thereby generate a _smaller_ value, or _subtract_ a negative number and
thereby generate a _bigger_ value?  Or that you can add or subtract
zero and get the same value?  Does this make "+" and "-" harder to
understand and less "readable"?  Or have we all managed to internalize
all these ideas?  Well, if we can do that with "+" and "-", then what's
the problem with transferring that understanding to "Increase" and
"Decrease" (or whatever you want to call them)?  Especially if we
explain to new Ada students that "Increase" is related to "+" and
"Decrease" is related to "-", so keep in mind everything you learned in
junior-high algebra?

(By the same token, why isn't the second parameter on "*" and "/"
restricted to numbers greater than 1.0?  Isn't multiplication
supposed to "expand" a value while division "reduces" it?  But if
you apply a number between 0.0 and 1.0 (exclusive), the effects of
these operations are the exact reverse.  And, of course, multiplying
or dividing exactly by 1.0 has no effect.  But do these properties
reduce the understandability or readability of "*" and "/"?
"You may very well think so, but I could not possibly comment."
-- Daniel Urquhart :-)

[snip]
>I left out the Min and Max also, but I now think the two
>argument versions should go in, but the versions with array parameters
>complicate things too much.

Are we talking Ada83 here?  If you mean Ada95, why reinvent the wheel?
Aren't Item'Min and Item'Max adequate?  Or did you mean:

    function Minimum_Of (This, That : in Item) return Item
        renames Item'Min;
        
    function Maximum_Of (This, That : in Item) return Item
        renames Item'Max;

Or maybe you meant:

    procedure Minimize (This : in out Item; Against : in Item) is
    begin
        This := Item'Min (This, Against);
    end Minimize;
    
    procedure Maximize (This : in out Item; Against : in Item) is
    begin
        This := Item'Max (This, Against);
    end Maximize;
    
As for array versions, well, there's a lot you could put into an
Array_Arithmetic package, but let's not go overboard... :-)

...

Hmm, I just realized that I missed a couple of operators.  Maybe we
should also include:

    procedure Negate (This : in out Item) is
    begin
        This := -This;
    end Negate;
    
    procedure Absolve (This : in out Item) is
    begin
        This := abs This;
    end Absolve; -- :-)  Well, can you think of a better related verb?

Of course, there's no C analog for these, but they do fit the pattern
of avoiding an error-prone repetition of a long target variable name.
  
------------------------------------------------------------------------
Internet.Usenet.Put_Signature
( Name => "John G. Volan", E_Mail => "John_Volan@dayton.saic.com",
  Favorite_Slogan => "Ada95: The *FIRST* International-Standard OOPL",
  Humorous_Disclaimer => "These opinions are undefined by SAIC, so" &
    "any use would be erroneous ... or is that a bounded error now?" );
------------------------------------------------------------------------




  reply	other threads:[~1996-03-27  0:00 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <823906039.22113@assen.demon.co.uk>
     [not found] ` <4fgrq3$mc4@qualcomm.com>
     [not found]   ` <dewar.823962356@schonberg>
1996-02-17  0:00     ` Ada is almost useless in embedded systems Tore Joergensen
1996-02-17  0:00       ` Robert Dewar
1996-02-19  0:00       ` Keith Thompson
1996-02-19  0:00         ` John McCabe
1996-02-21  0:00           ` Richard A. O'Keefe
1996-02-21  0:00             ` Norman H. Cohen
1996-02-19  0:00 ` Jon S Anthony
1996-02-19  0:00 ` R.A.L Williams
1996-02-21  0:00   ` Richard A. O'Keefe
1996-02-19  0:00 ` AdaWorks
1996-02-21  0:00   ` Ken Garlington
1996-02-23  0:00     ` AdaWorks
     [not found] ` <824056183.18993@assen.demon.co.uk>
     [not found]   ` <311E924E.74CE@escmail.orl.mmc.com>
1996-02-17  0:00     ` Ada is great for embedded systems (was Ada is almost useless in embedded systems) Ken & Virginia Garlington
     [not found]   ` <4fnqpm$3nh@news.sanders.lockheed.com>
1996-02-19  0:00     ` Ada is almost useless in embedded systems AdaWorks
1996-02-21  0:00       ` Hugh Dunne
1996-02-21  0:00       ` Ken Garlington
     [not found]   ` <4fnp37$nj1@theopolis.orl.mmc.com>
1996-02-22  0:00     ` Alan Brain
     [not found] ` <emery-0902962215150001@line316.nwm.mindlink.net>
     [not found]   ` <DMoA85.52I@eskimo.com>
     [not found]   ` <823965654.4500@assen.demon.co.uk>
     [not found]     ` <824165619.14894@assen.demon.co.uk>
     [not found]       ` <JSA.96Feb13133713@organon.com>
     [not found]         ` <824259217.26321@assen.demon.co.uk>
1996-02-17  0:00           ` Robert Dewar
1996-02-18  0:00             ` John McCabe
1996-02-18  0:00               ` Robert Dewar
1996-02-19  0:00                 ` John McCabe
1996-02-20  0:00                   ` Robert Dewar
1996-02-21  0:00                   ` Fergus Henderson
     [not found]         ` <824332550.2485@assen.demon.co.uk>
1996-02-17  0:00           ` Ken & Virginia Garlington
1996-02-17  0:00             ` Robert Dewar
1996-02-18  0:00               ` John McCabe
1996-02-18  0:00                 ` Robert Dewar
1996-02-19  0:00                   ` John McCabe
     [not found]       ` <4fs7ml$cf1@rational.rational.com>
1996-02-26  0:00         ` Ada 83 " Alan Brain
1996-02-26  0:00 ` Ada is almost useless " R.A.L Williams
     [not found]   ` <4h3q56$1vk@goanna.cs.rmit.EDU.AU>
     [not found]     ` <dewar.825635955@schonberg>
     [not found]       ` <826571250.140@assen.demon.co.uk>
     [not found]         ` <dewar.826634800@schonberg>
1996-03-21  0:00           ` John McCabe
1996-03-23  0:00             ` Side-effect arithmetic again [was: Ada ... in embedded systems] John G. Volan
1996-03-23  0:00               ` Robert Dewar
1996-03-25  0:00                 ` Tucker Taft
1996-03-25  0:00                   ` Norman H. Cohen
1996-03-25  0:00                   ` Robert A Duff
1996-03-26  0:00               ` John G. Volan
1996-03-26  0:00                 ` Robert A Duff
1996-03-26  0:00                   ` Tore Joergensen
1996-03-27  0:00                     ` John G. Volan [this message]
1996-03-27  0:00                     ` John G. Volan
1996-03-29  0:00                       ` Robert A Duff
1996-03-30  0:00                         ` John G. Volan
1996-03-31  0:00                           ` AdaWorks
1996-04-01  0:00                           ` Robert A Duff
1996-03-30  0:00                         ` John G. Volan
1996-03-27  0:00                     ` John G. Volan
1996-03-28  0:00                       ` Tucker Taft
1996-03-28  0:00                         ` Robert Dewar
1996-03-29  0:00                           ` Tucker Taft
1996-03-29  0:00                             ` Tucker Taft
1996-03-26  0:00                 ` Robert Dewar
1996-03-29  0:00                   ` Robert I. Eachus
     [not found] ` <RALW.96Feb28100925@vulcan.gmrc.gecm.com>
1996-03-15  0:00   ` Ada is almost useless in embedded systems Robert I. Eachus
     [not found]     ` <dirk.827148504@demokrit>
1996-03-18  0:00       ` David Weller
1996-03-18  0:00     ` Alan Brain
     [not found]       ` <4ik5bm$ogg@dayuc.dayton.saic.com>
1996-03-18  0:00         ` Side-effect arithmetic again [was: Ada ... in embedded systems] Robert Dewar
1996-03-19  0:00           ` Norman H. Cohen
1996-03-19  0:00           ` Jay Martin
1996-03-21  0:00             ` Robert I. Eachus
     [not found]   ` <dewar.825775334@schonberg>
     [not found]     ` <RALW.96Mar8113005@vulcan.gecm.com>
     [not found]       ` <4hv2fb$6ra@cville-srv.wam.umd.edu>
     [not found]         ` <4xybp895y6.fsf@leibniz.enst-bretagne.fr>
     [not found]           ` <3144CC40.33A0@escmail.orl.mmc.com>
     [not found]             ` <dewar.826604375@schonberg>
     [not found]               ` <3145FF2C.6139@escmail.orl.mmc.com>
     [not found]                 ` <dewar.826829407@schonberg>
     [not found]                   ` <31499D21.1DA6@escmail.orl.mmc.com>
1996-03-15  0:00                     ` Bug or Limitation? (was: Ada is almost useless in embedded systems) Robert Dewar
1996-03-16  0:00                       ` Ted Dennison
1996-03-20  0:00                         ` Side-effect arithmetic again [was: Ada ... in embedded systems] Robert I. Eachus
1996-03-20  0:00                           ` John G. Volan
1996-03-22  0:00                             ` Alan Brain
1996-03-20  0:00                           ` Robert A Duff
1996-03-21  0:00                             ` Peter Hermann
1996-03-21  0:00                               ` Robert Dewar
1996-03-25  0:00                                 ` Robert I. Eachus
1996-03-28  0:00                               ` Mats Weber
1996-03-29  0:00                                 ` John G. Volan
1996-03-21  0:00                           ` Geert Bosch
1996-03-26  0:00                           ` Mats Weber
1996-03-16  0:00 ` Ada is almost useless in embedded systems Kevin Dalley
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox