comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: float with 24-bit resolution
Date: Sat, 6 Sep 2003 16:48:58 -0400
Date: 2003-09-06T16:48:58-04:00	[thread overview]
Message-ID: <fQr6b.10763$Pa1.518295@read1.cgocable.net> (raw)
In-Reply-To: vlhpbhsvhh5564@corp.supernews.com

"Randy Brukardt" <randy@rrsoftware.com> wrote in message news:vlhpbhsvhh5564@corp.supernews.com...
> "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca> wrote in message
> news:_x36b.22730$su.613585@news20.bellglobal.com...
> > Randy Brukardt wrote:
> > > You could "fix" that with a comment, but an explicit initializer works
> > > just as well.
> >
> > But this also increases the maintenance cost if you change
> > the nature or number of members of that object. It also
> > creates a maintenance nightmare if the initialization
> > defaults are changed (in the spec) but the explicit
> > initialization undoes what is "correct" for it initially
> > (ie. the worst case is when it compiles, but fails to
> > work correctly because the incorrect initialization
> > value remains, even though the spec has been corrected).
>
> If your project has "visible" (i.e. non-private) record types where the
> components can change, it has maintenance problems to begin with.
> Initializers are the least of your problems. Inside the package,
> initialization should always be done with aggregates (exactly so that missed
> changes cause compile-time errors).

Well, I suppose when I use tagged types, the internals are usually
private, so I generally don't run into this. However, I would suggest
IMHO, that even the public components are much better initialized
(at least by default) based upon the designer's original intent
(ie. in the spec.)  OTOH, if the members are public, then it
is open to some question about how the members should be used 8-)

In my mind it comes down to the simple engineering practice that
you centralize things that are subject to change. This is why
things like an error code are generally defined in one place.
Sure I could define that same constant everywhere else, and
make it the same initially, but it is a maintenance nightmare
later when that value changes. Even worse if it can change, but
still compile and go unnoticed until something fatal happens.
The same principle holds for record member initialization.

So I maintain that unless you have a good reason to override
the default initialization, it is better left alone.

> The problem here is the inconsistence of the language. Some types can be
> implicitly initialized, and others cannot. That makes problems for private
> types (because if you assume that they are implicitly initialized, you are
> breaking privateness and/or significantly restricting the implementation (to
> records and access types only). On the other hand, limited types can only be
> initialized implicitly (that probably will change in Ada 200Y). Thus, it is
> impossible for any rule to be completely consistent.
>
> I do use implicit initializers in some cases (especially for limited types,
> where nothing else is possible). But I prefer to make it explicit when
> possible (generally reserving implicit initialization to marking an object
> as "not valid").
>
>                        Randy.

Explicit initialization is similar in principle to a non-normalized
database. You have duplication of information, when the initialized
values are the same. Normalized database designs are preferred (though
not always achieved in practice).

Conversely, normalization of data means that your data is centralized.
This centralizes your "maintenance" and ensures that if you change that
value that you have got it correct everywhere else that it is needed.

-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg





  reply	other threads:[~2003-09-06 20:48 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-15 11:59 float with 24-bit resolution mailbox
2003-08-15 12:24 ` Jeffrey Creem
2003-08-15 12:52   ` Adrian Hoe
2003-08-15 12:54     ` Adrian Hoe
2003-08-15 15:01       ` Jeffrey Creem
2003-08-16 15:29         ` Matthew Heaney
2003-08-15 13:39     ` Mark Johnson
2003-08-15 16:56       ` Robert I. Eachus
2003-08-15 18:08         ` Mark Johnson
2003-08-16  3:30           ` Robert I. Eachus
2003-08-18 13:39             ` Mark Johnson
2003-08-20 21:12               ` Robert I. Eachus
2003-08-21 13:38                 ` Mark Johnson
2003-08-16 15:32         ` Matthew Heaney
2003-08-16 15:26     ` Matthew Heaney
2003-08-15 19:56   ` Simon Wright
2003-08-16  4:21     ` Adrian Hoe
2003-08-16 12:59       ` Jeffrey Creem
2003-08-16 15:35     ` Matthew Heaney
2003-08-17 11:40       ` Simon Wright
2003-08-17 13:46         ` Matthew Heaney
2003-08-18  5:05       ` Adrian Hoe
2003-08-18 13:14         ` Matthew Heaney
2003-08-19  3:09           ` Adrian Hoe
2003-08-19 13:00             ` Matthew Heaney
2003-08-30  5:02           ` Randy Brukardt
2003-09-02 16:05             ` Adrian Hoe
2003-09-03  3:31               ` Matthew Heaney
2003-09-03 20:46                 ` Simon Wright
2003-09-04  1:43                   ` Randy Brukardt
2003-09-04  9:53                     ` Jean-Pierre Rosen
2003-09-05  3:46                       ` Randy Brukardt
2003-09-05 17:16                     ` Warren W. Gay VE3WWG
2003-09-05 19:37                       ` Randy Brukardt
2003-09-06 20:48                         ` Warren W. Gay VE3WWG [this message]
2003-09-08  7:53                         ` Dmitry A. Kazakov
2003-09-04  1:45                 ` Randy Brukardt
2003-08-16  3:42   ` Robert I. Eachus
2003-08-16 15:38     ` Matthew Heaney
2003-08-16 16:36       ` Robert I. Eachus
2003-08-16 15:22 ` Matthew Heaney
2003-08-17 11:46   ` Simon Wright
2003-08-18 10:04     ` Martin Dowie
2003-08-20 19:53       ` Robert I. Eachus
2003-08-20 23:36         ` Ludovic Brenta
2003-08-21 13:54           ` Mark Johnson
2003-08-21 14:35             ` Ludovic Brenta
2003-08-22 14:07               ` Mark Johnson
2003-08-22 15:12                 ` Jean-Pierre Rosen
replies disabled

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