From: dmitry@elros.cbb-automation.de (Dmitry A. Kazakov)
Subject: Re: Dimensionality Checking (Ada 20XX)
Date: Fri, 07 Dec 2001 09:37:16 GMT
Date: 2001-12-07T09:37:16+00:00 [thread overview]
Message-ID: <3c108b58.4453515@News.CIS.DFN.DE> (raw)
In-Reply-To: 36c6f8dd.0112061152.333c9de@posting.google.com
On 6 Dec 2001 11:52:12 -0800, britt@adapower.net (Britt Snodgrass)
wrote:
>Perhaps this is not a new proposal but it seems to me that units
>(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
>attribute would default to "null" (no units). The compiler could then
>enforce unit consistency during compilation or generate runtime unit
>checking code.
>
>For example:
>
>with Ada.Text_IO;
>
>with Ada.Dimensionality.ISO_Metric_Units;
>-- predefined for kilograms, meters, etc.
>
>with Ada.Dimensionality.My_User_Defined_Units
>-- parsecs_per_picosecond, etc.
>
>use Ada.Dimensionality;
>
>package body Proposed_Unit_Syntax_Example is
>
> type Magnitude is digits 15;
>
> Delta_Position : Magnitude;
> for Delta_Position'Unit use ISO_Metric_Units.Meter;
>
> Delta_Time : Magnitude;
> for Delta_Time'Unit use ISO_Metric_Units.Second;
>
> Current_Speed : Magnitude;
> for Current_Speed'Unit use
> ISO_Metric_Units.Meter / ISO_Metric_Units.Second;
>
> Accel : Magnitude;
> for Accel'Unit use
> ISO_Metric_Units.Meter / ISO_Metric_Units.Second**2;
> -- note use of operators in attribute definition.
>
>begin
>
> Delta_Position := 500.0; -- meters implied by unit attribute
>
> Delta_Interval := 10.0; -- seconds implied by unit attribute
>
> Current_Speed := Delta_Position / Delta_Interval;
> -- OK, units match
>
> Current_Speed := Delta_Position / Delta_Interval**2;
> -- won't compile or raises a predefined Unit_Error exception;
>
>exception
>
> when Unit_Error =>
> Ada.Text_IO.Put_Line
> ("Oops! I just passed Mars without stopping to orbit!");
>
>end Proposed_Unit_Syntax_Example;
>
>
>Since all of the variables in this example are of the same type, no
>new arithmetic operators need to be defined. However the compiler
>would use the unit attributes to ensure that any resulting right-side
>composite unit matches the left-side unit before allowing an
>assignment to proceed. Most unit inconsistencies would be caught
>during compilation. If a unit mismatch can't be caught until runtime,
>then a predefined Unit_Error exception would be raised (unless the
>code had been compiled with Pragma Suppress (Unit_Checks) ).
I would also prefer a representation clause over rather obscure
pragmas, but the question stands: how to do class-wide unit
programming? For instance, how to write [non-generic] subprogram
IntegrateTime which takes <unit>/s and returns <unit>? How to write a
subprogram that gets user input from a dialog field and returns some
dimensioned value?
Therefore I would prefer a solution based on discriminants or else
tags provided that the compiler will remove all extra data fields and
run-time checks in case when units are statically known.
Regards,
Dmitry Kazakov
next prev parent reply other threads:[~2001-12-07 9:37 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-12-02 16:01 Another Idea for Ada 20XX James Rogers
2001-12-02 16:38 ` Preben Randhol
2001-12-02 22:26 ` James Rogers
2001-12-02 21:19 ` Patrick Hohmeyer
2001-12-02 21:26 ` Lutz Donnerhacke
2001-12-02 23:49 ` Patrick Hohmeyer
2001-12-03 6:06 ` Wilhelm Spickermann
2001-12-03 8:58 ` Lutz Donnerhacke
2001-12-03 13:40 ` Thomas Koenig
2001-12-03 0:21 ` Robert C. Leif, Ph.D.
2001-12-03 0:35 ` Robert Dewar
2001-12-03 1:33 ` James Rogers
2001-12-03 12:34 ` Dirk Dickmanns
2001-12-04 19:02 ` Unit handling (was: Another Idea for Ada 20XX) Wilhelm Spickermann
2001-12-03 14:56 ` Another Idea for Ada 20XX 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 [this message]
2001-12-07 22:51 ` Mark Lundquist
2001-12-03 17:00 ` Another Idea for Ada 20XX chris.danx
-- strict thread matches above, loose matches on Subject: below --
2001-12-07 0:09 Dimensionality Checking (Ada 20XX) Snodgrass, Britt (NM75)
2001-12-07 16:15 ` 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
2001-12-11 13:11 Mike Brenner
2001-12-11 17:03 ` 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