comp.lang.ada
 help / color / mirror / Atom feed
From: "Snodgrass, Britt (NM75)" <Britt.Snodgrass@honeywell.com>
To: "'comp.lang.ada@ada.eu.org'" <comp.lang.ada@ada.eu.org>
Subject: RE: Dimensionality Checking (Ada 20XX)
Date: Thu, 6 Dec 2001 17:09:20 -0700
Date: 2001-12-06T17:09:20-07:00	[thread overview]
Message-ID: <mailman.1007683804.26935.comp.lang.ada@ada.eu.org> (raw)



> -----Original Message-----
> From: Wes Groleau [mailto:wgroleau@usa.com]
> Sent: Thursday, December 06, 2001 3:39 PM
> To: comp.lang.ada@ada.eu.org
> Subject: Re: Dimensionality Checking (Ada 20XX)
> 
> Britt Snodgrass wrote:
> > (dimensionality) in Ada code would be most naturally implemented as
> > attributes of objects or types.  The units of an object or type would
> > be specified with a representation clause.  If unspecified, the unit
> 
> I think this is a very good idea.  But now to nitpick:
> 
> >    Accel : Magnitude;
> >    for Accel'Unit use
> >      ISO_Metric_Units.Meter / ISO_Metric_Units.Second**2;
> 
> In some cases, might there be multiple ways to describe
> the units?   Speed is Acceleration * Time but it is also
> Distance / Time.

Yes, but the compiler would resolve both of these to a canonical form such
as Distance_Unit**(1)*Time_Unit**(-1) and know that they both represent the
same composite unit.

I am also thinking that unit conversions could be accomplished using syntax
similar to the following example:

      type Magnitude is digits 15;

      Accel_FPS2 : Magnitude;
      for Accel_FPS2'Unit use
        Goofy_Old_Units.Foot / ISO_Metric_Units.Second**2;
        -- feet per second per second

      Accel_MPS2 : Magnitude;
      for Accel_MPS2'Unit use
        ISO_Metric_Units.Meter / ISO_Metric_Units.Second**2;
        -- meters per second per second

   begin

       Accel_FPS2 := 32.0  -- "Feet per second squared" implied

        -- now convert units like this:
       Accel_MPS2 := Accel_FPS2 * Accel_MPS2'Unit / Accel_FPS2'Unit;

       -- or this:
       Accel_MPS2 :=
         Accel_FPS2 * ISO_Metric_Units.Meter / Goofy_Old_Units.Foot;


provided that every base unit (distance, mass, time, charge, etc.) attribute
had a corresponding named number whose value was the ratio of the named unit
to the ISO base unit.  For example:

   ISO_Metric_Units.Meter     :=    1.0;     -- value in meters
   ISO_Metric_Units.Kilometer := 1000.0;     -- value in meters
   Goofy_Old_Units.Foot       :=    0.3048;  -- value in meters

This idea is still half-baked but I'll keep thinking about it.  It would be
nice to have some type of dimensional unit support specified in an optional
Annex for Ada 200X.

Britt

   P.S.  The example in my first post should have been a "procedure", not a
"package body"



 





             reply	other threads:[~2001-12-07  0:09 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-07  0:09 Snodgrass, Britt (NM75) [this message]
2001-12-07 16:15 ` Dimensionality Checking (Ada 20XX) Ian
2001-12-09 17:58   ` Nick Roberts
2001-12-09 22:58     ` Nick Roberts
2001-12-10  0:17     ` Mark Lundquist
2001-12-10  1:51       ` James Rogers
2001-12-10  3:33         ` Nick Roberts
2001-12-10 19:09           ` Nick Roberts
2001-12-11  8:20             ` Thomas Koenig
2001-12-11 15:37               ` Nick Roberts
2001-12-11 20:18                 ` Thomas Koenig
2001-12-12  0:58                   ` Mark Lundquist
2001-12-12  8:19                     ` Wilhelm Spickermann
2001-12-12 14:21                     ` Stephen Leake
2001-12-12 19:10                       ` Nick Roberts
2001-12-13 19:04                         ` Stephen Leake
2001-12-13 22:56                           ` Nick Roberts
2001-12-14  0:11                             ` Nick Roberts
2001-12-14 22:14                       ` Mark Lundquist
2001-12-15  1:30                         ` Nick Roberts
2001-12-10 20:22         ` Thomas Koenig
2001-12-10 17:21       ` Wes Groleau
2001-12-10 19:51         ` Mark Lundquist
2001-12-10 19:56           ` Wes Groleau
2001-12-10 20:37             ` Mark Lundquist
2001-12-10 18:56       ` Nick Roberts
2001-12-11 15:05         ` Wes Groleau
2001-12-11 16:39         ` Stephen Leake
2001-12-11 19:05           ` Nick Roberts
2001-12-11 22:50             ` Mark Johnson
2001-12-12  1:59               ` Nick Roberts
2001-12-11 23:01             ` Stephen Leake
2001-12-12  2:21               ` Nick Roberts
2001-12-12 14:16                 ` Stephen Leake
2001-12-13 19:52                   ` Nick Roberts
2001-12-13 22:22                     ` Nick Roberts
2001-12-14  6:40                       ` Robert C. Leif, Ph.D.
2001-12-14 17:30                       ` Stephen Leake
2001-12-14 17:38                     ` Stephen Leake
2001-12-11 22:45           ` Mark Lundquist
2001-12-12  1:42             ` Nick Roberts
2001-12-12 15:17               ` Mark Lundquist
2001-12-12 14:03             ` Stephen Leake
2001-12-12  9:35           ` Dmitry A. Kazakov
2001-12-12 14:26             ` Stephen Leake
2001-12-13 17:02               ` daniele andreatta
2001-12-13 19:06                 ` Stephen Leake
2001-12-14 10:16                 ` Dmitry A. Kazakov
2001-12-14 22:01                   ` Nick Roberts
2001-12-17 11:10                     ` Dmitry A. Kazakov
2001-12-17 12:16                       ` Thomas Koenig
2001-12-17 14:30                         ` Dmitry A. Kazakov
2001-12-27 17:18                         ` Steven Deller
2001-12-15  7:07                   ` Steven Deller
2001-12-17 12:31                     ` Dmitry A. Kazakov
2001-12-17 13:46                       ` Thomas Koenig
2001-12-17 15:00                         ` Dmitry A. Kazakov
2001-12-17 16:38                         ` Thomas Koenig
2001-12-17 21:07                       ` Britt Snodgrass
2001-12-20 13:44                         ` Dmitry A. Kazakov
2001-12-13 19:33         ` Mark Lundquist
2001-12-13 22:15           ` Nick Roberts
2001-12-14 20:20             ` Mark Lundquist
2001-12-10 23:31       ` Mark Lundquist
2001-12-10 13:57     ` Ian
2001-12-10 17:24       ` Wes Groleau
2001-12-10 20:38       ` Britt Snodgrass
  -- strict thread matches above, loose matches on Subject: below --
2001-12-11 13:11 Mike Brenner
2001-12-11 17:03 ` Mark Lundquist
2001-12-02 16:01 Another Idea for Ada 20XX James Rogers
2001-12-03 14:56 ` Mark Lundquist
2001-12-03 15:12   ` Lutz Donnerhacke
2001-12-03 21:13     ` Dimensionality Checking (Ada 20XX) Nick Roberts
2001-12-04 14:00       ` Dmitry A. Kazakov
2001-12-06 19:52         ` Britt Snodgrass
2001-12-06 20:55           ` Mark Lundquist
2001-12-06 22:38           ` Wes Groleau
2001-12-06 23:12             ` Mark Lundquist
2001-12-07 14:36               ` Wes Groleau
2001-12-07  9:37           ` Dmitry A. Kazakov
2001-12-07 22:51           ` Mark Lundquist
replies disabled

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