comp.lang.ada
 help / color / mirror / Atom feed
From: "Mark Lundquist" <mlundquist2@attbi.com>
Subject: Dimensions (was Re: Another Idea for Ada 20XX)
Date: Fri, 07 Dec 2001 22:51:47 GMT
Date: 2001-12-07T22:51:47+00:00	[thread overview]
Message-ID: <7KbQ7.13821$L51.28784@rwcrnsc54> (raw)
In-Reply-To: 3C0EF0A0.9F42EDB4@adaworks.com


"Richard Riehle" <richard@adaworks.com> wrote in message
news:3C0EF0A0.9F42EDB4@adaworks.com...
>
> I don't believe it requires a change to the language.  Rather, it begs
> for a
> simple object-oriented programming solution, along with some
> old-fashioned
> encapsulation.
>
>          package Metric_Number is
>               type Metric_Type is private;
>               -- export services for arithmetic on this type
>               function "+"(L,  R : Metric_Type) return Metric_Type;
>               -- more arithmetic and boolean functions
>          private
>               -- full definition for the Metric_Type;
>               -- helper type to avoid recursion during implementation
>          end Metric_Number;

I have no idea what you're getting at with the "helper type to avoid
recursion"... :-)  But in any case, the "good old-fashioned encapsulation"
isn't enough (see below)...

>
> In this way, we can control the behavior of each function with some
> exactness
> instead of depending only on the predefined behavior of ALRM Chapter 4
> for
> numeric types.   Of course, if we also had pre- and post-conditions as
> part of
> the language, this contract could be made even more robust.

I don't see how pre- and post-conditions are relevant... ???

But anyway...

All these schemes that rely on hiding the representation have some serious
weaknesses.  First of all, the public view is not scalar.  So

(a) your type is not compatible with generics that take scalar formals --
you are limited to formal private types; and

(b) you cannot declare subtypes with range constraints.

(In my opinion (b) is by far the worse of these).

(c) it's way labor-intensive

But the worst is still to come :-).  These schemes are quite brittle and
unscalable, because:

(d) you have to define all your visibly quasi-numeric operations on every
combination of types for base and derived units, so you have a
multiplicative explosion on your hands

(e) the explosion continues if you want more than one unit per dimension.
It explodes in both new overloadings of the quasi-numeric operations, and
also in the unit conversions.

(f) all the unit types that you wish to be interoperable must be declared in
the same package, since they are private, and you can't use child packages
for this because then the operations are no longer primitive.  It requires
"prescience/ominiscience" on the part of the designer, so unless you are
really God but you just go by "Richard Riehle" on Usenet :-), it could only
be considered for self-contained software where you're "rolling your own"
and in complete control of all the code.

(g) if you wanted to have multiple types with the same unit relationships
but different representations, e.g. different delta, decimal or fixed-point
types, you are hosed -- the scheme becomes totally unmanageable at that
point.

Best Regards,
Mark






  parent reply	other threads:[~2001-12-07 22:51 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-02 19:51 Another Idea for Ada 20XX Gautier Write-only-address
2001-12-02 22:36 ` James Rogers
2001-12-03 12:44   ` Marc A. Criley
2001-12-03 14:29     ` Larry Kilgallen
2001-12-04  0:25       ` Marc A. Criley
2001-12-04  1:40   ` Adrian Hoe
2001-12-04  1:56     ` Larry Kilgallen
2001-12-04 16:08       ` Wes Groleau
2001-12-04 17:48         ` Larry Kilgallen
2001-12-09 23:02           ` Nick Roberts
2001-12-10 16:22             ` Stephen Leake
2001-12-10 17:11               ` Wes Groleau
2001-12-10 20:30               ` Robert C. Leif, Ph.D.
2001-12-10 20:59                 ` Wes Groleau
2001-12-10 17:09             ` Wes Groleau
2001-12-10 17:32               ` Larry Kilgallen
2001-12-04 19:59         ` Vincent Marciante
2001-12-04 20:20           ` Wes Groleau
2001-12-04 22:18         ` Matthew Heaney
2001-12-06  4:14         ` Richard Riehle
2001-12-06 17:39           ` Wes Groleau
2001-12-07  0:55             ` Adrian Hoe
2001-12-07  9:01               ` Dmitry A. Kazakov
2001-12-07 11:49           ` Tarjei T. Jensen
2001-12-07 22:51           ` Mark Lundquist [this message]
2001-12-08  3:52             ` Dimensions (was Re: Another Idea for Ada 20XX) Richard Riehle
2001-12-08  5:28               ` Mark Lundquist
2001-12-08 18:59                 ` Matthew Heaney
2001-12-08 21:23               ` Wes Groleau
2001-12-09 22:15               ` Robert C. Leif, Ph.D.
2001-12-10 14:09             ` Ian
2001-12-03 14:56 ` Another Idea for Ada 20XX Mark Lundquist
2001-12-06 15:27   ` Philip Anderson
2001-12-07 22:51     ` Mark Lundquist
2001-12-10  9:01       ` Dmitry A. Kazakov
replies disabled

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