comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Rational for not making cursor tagged in Containers
Date: Thu, 26 Apr 2007 09:50:35 +0200
Date: 2007-04-26T09:50:35+02:00	[thread overview]
Message-ID: <1ukuo9arhsjuu.1xhbhqzroadfz.dlg@40tude.net> (raw)
In-Reply-To: 1177549092.325163.326870@b40g2000prd.googlegroups.com

On 25 Apr 2007 17:58:12 -0700, Adam Beneschan wrote:

> On Apr 24, 1:19 pm, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
>> On 24 Apr 2007 09:27:37 -0700, Adam Beneschan wrote:
>>
> Your answer to that didn't really answer the question about predefined
> equality, but went into some stuff about user-defined equality.  So
> we're back where we started.  Does the predefined equality compare
> just the values, or does it compare the discriminants also?

The predefined equality compares memory bit patterns. Observe, that for any
fundamental built-in type there is no way to define equality otherwise than
this way. An implementation shall ensure that different values of the
discriminants and the positions of values render predefined comparison to
false.

> Hmmm...  OK, I see how that might work in that particular case.
> However, that does make it seem that, although your idea about putting
> discriminants on enumeration literals seems like a nice general idea,
> it won't work unless there is only one possible value for the
> discriminant for which the enumeration value makes any sense.  That's
> the case for your GUI_Boolean example---if Defined=True, the
> enumeration part of the value can be used, and if Defined=False, the
> enumeration part is meaningless.  That's not very general, though.
> Suppose, for example, you wanted a GUI_Boolean with three states:
> Not_Defined, Defined_By_Config, Defined_By_User, where the latter two
> states would distinguish whether a Boolean value were set by some
> default present in a configuration file (or the Winodws registry,
> say), or were explicitly entered by the user.  Now you can't really do
> this, without adding extra syntax and semantics to the language:
> 
>    type GUI_State is (Not_Defined, Defined_By_Config,
> Defined_By_User);
>    type GUI_Boolean (State : GUI_State := ???) is (False, True);
> 
> Whichever value you pick for the default State---Defined_By_Config or
> Defined_By_User---you don't have a way to set up a GUI_Boolean whose
> state is the other one and whose value is one of the False/True
> literals.

Yes, and this is a desired feature. It is important to clearly understand
that discriminant is not yet-another-record-field. Discriminant is a
constraint put on the values. If you have two values of the type and three
values of the constraint, then it shouldn't wonder you that this construct
wouldn't be much usable. What is the difference between Defined_By_Config
True and Defined_By_User True? Just bad design and language misuse.

---------------
My point was, logically and semantically any type may have discriminants =
be dynamically constrained.

It is quite difficult (IMO impossible) to show why some special classes of
types may not be constrained. There exist very strong cases for real,
access and array types which indeed require discriminants. I mentioned them
in other posts. The rest is basically enumeration types and Robert Duff
asked for an example for Boolean type. It was a challenge to think an
example out, I hope you enjoyed it. For a more elaborated enumeration type
I would probably propose dynamically constrained ranges of, or something
similar. But again, that was not the point.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-04-26  7:50 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-19 16:05 Rational for not making cursor tagged in Containers Anh Vo
2007-04-19 18:25 ` Robert A Duff
2007-04-19 19:28   ` Anh Vo
2007-04-19 20:45     ` Robert A Duff
2007-04-19 21:43       ` Dmitry A. Kazakov
2007-04-19 23:59         ` Ray Blaak
2007-04-20  7:54           ` Dmitry A. Kazakov
2007-04-20 10:56             ` Georg Bauhaus
2007-04-20 10:39               ` Dmitry A. Kazakov
2007-04-20 14:42                 ` Georg Bauhaus
2007-04-20 14:45                   ` Georg Bauhaus
2007-04-20 15:13                   ` Dmitry A. Kazakov
2007-04-20 19:37                     ` Georg Bauhaus
2007-04-20 19:32                       ` Dmitry A. Kazakov
2007-04-20 20:59                         ` Robert A Duff
2007-04-20 22:14                           ` Dmitry A. Kazakov
2007-04-23 17:38                             ` Adam Beneschan
2007-04-23 19:18                               ` Dmitry A. Kazakov
2007-04-24  0:15                                 ` Adam Beneschan
2007-04-24 10:43                                   ` Dmitry A. Kazakov
2007-04-24 16:27                                     ` Adam Beneschan
2007-04-24 20:19                                       ` Dmitry A. Kazakov
2007-04-26  0:58                                         ` Adam Beneschan
2007-04-26  7:50                                           ` Dmitry A. Kazakov [this message]
2007-04-26  8:09                                             ` Markus E Leypold
2007-04-27  8:46                                               ` Dmitry A. Kazakov
2007-04-27 11:37                                                 ` Markus E Leypold
2007-04-28 17:35                                                   ` Dmitry A. Kazakov
2007-04-29  2:31                                                     ` Randy Brukardt
2007-04-29  8:45                                                       ` Dmitry A. Kazakov
2007-04-27 20:44                                               ` Robert A Duff
2007-04-26  8:33                                             ` Markus E Leypold
2007-04-26 11:09                                               ` Markus E Leypold
2007-04-20 19:55                       ` Randy Brukardt
2007-04-22  9:54                         ` Georg Bauhaus
2007-04-22 11:19                           ` Dmitry A. Kazakov
2007-04-20 20:44                       ` Robert A Duff
2007-04-21  5:38                         ` Randy Brukardt
2007-04-22  1:14                           ` Robert A Duff
2007-04-22  4:08                             ` Randy Brukardt
2007-04-20 20:11                     ` Randy Brukardt
2007-04-20 21:28                       ` Dmitry A. Kazakov
2007-04-21  5:33                         ` Randy Brukardt
2007-04-21  9:39                           ` Dmitry A. Kazakov
2007-04-22  4:28                             ` Randy Brukardt
2007-04-22  8:38                               ` Dmitry A. Kazakov
2007-04-23 23:26                                 ` Randy Brukardt
2007-04-24 10:43                                   ` Dmitry A. Kazakov
2007-04-24  8:58                                 ` Georg Bauhaus
2007-04-24 12:21                                   ` Dmitry A. Kazakov
2007-04-21  4:48                       ` unifying arrays and records (was Re: Rational for not making cursor tagged in Containers) Ray Blaak
2007-04-20 17:05             ` Rational for not making cursor tagged in Containers Ray Blaak
2007-04-20 18:46               ` Dmitry A. Kazakov
2007-04-20 18:52                 ` Ray Blaak
2007-04-20 19:54                   ` Robert A Duff
2007-04-20  1:18         ` Anh Vo
2007-04-20  7:53           ` Dmitry A. Kazakov
2007-04-20  9:26             ` Maciej Sobczak
2007-04-20 10:15               ` Dmitry A. Kazakov
2007-04-20 11:59           ` Jean-Pierre Rosen
2007-04-20 13:23             ` Anh Vo
2007-04-20 16:02               ` Jean-Pierre Rosen
2007-04-21  2:53                 ` Anh Vo
2007-04-20  3:03   ` Randy Brukardt
2007-04-20  2:53 ` Randy Brukardt
2007-04-20 16:08   ` Anh Vo
replies disabled

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