comp.lang.ada
 help / color / mirror / Atom feed
From: Dmitry A.Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: status of Ada STL?
Date: Thu, 20 Jun 2002 23:42:08 +0200
Date: 2002-06-20T23:42:08+02:00	[thread overview]
Message-ID: <aes7nh$9ar7i$1@ID-77047.news.dfncis.de> (raw)
In-Reply-To: bebbba07.0206192250.7f1899cf@posting.google.com

Russ wrote:

> Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> wrote in message
> news:<ibt0hu4fdr9ql5duvgogp9iv6vf57kqgr7@4ax.com>...
>> On 18 Jun 2002 22:32:12 -0700, 18k11tm001@sneakemail.com (Russ) wrote:
>> 
>> >Dmitry A.Kazakov <mailbox@dmitry-kazakov.de> wrote in message
>> >news:<aemvpd$8dojl$1@ID-77047.news.dfncis.de>...
>> >> Russ wrote:
>> >> 
>> >> > Immediately after the statement "x=3" executes, it becomes true in
>> >> > the mathematical sense, which is why it makes sense.
>> >> 
>> >> Nope. Consider C++ having user-defined type conversions. It is very
>> >> easy to write a program in C++ that
>> >> 
>> >> SomeClass x;
>> >> 
>> >> x=3;
>> >> if (x==3) // false
>> >
>> >I should have been more specific. For any instance x of a built-in
>> >numerical type, the statement "x=3" becomes true in a mathematical
>> >sense immediately after it executes. (If I am wrong, please provide a
>> >counter-example.)
>> 
>> 1. From ADT point of view there is no difference between numerical,
>> built-in or whatsoever types and other types. There are good reasons
>> why it should be so.
>> 
>> 2. Try [C is a funny language!]:
>> 
>>    int x;
>> 
>>    x=1.5;
>>    if (x == 1.5) // false
>> --------------------------------
>>    float x;
>> 
>>    x = 1.00000001;
>>    if (x != 1.00000001) printf ("oops!\n");
> 
> All you've shown here is that assignment does not always work as
> expected in C. I agree that a non-integer shouldn't simply be
> converted an integer with no warning, but that's a completely separate
> issue from the semantics of assignment. Had those assignments worked
> as the programmer presumably intended them to, the tests would have
> evaluated to true.

I just gave you counter-examples. They show that even with primitive 
numerical types it is not so easy defend your point, because even they are 
not mathematical entities, but only inprecise models of those. Three 
involved types int, float and double model in the examples real numbers and 
oops, here you are. With user-defined types it becomes far worse.

Aside, you are trying to tie one langauge level the semantics of one 
operator with the semantics of another. This is a wrong way, which makes 
things more complicated for a programmer. It is wrong because SEMANTICS is 
a property of a program and not of the language the program is written in.
Interestingly is that Ada's design is on your side here, sigh. For 
instance, Ada tries to deduce inequality operator user-defined equality. It 
also tries to deduce assignment (":=") from copy-constructor (bitwise copy 
+ user-defined Adjust), etc. In my opinion it is a wrong way to do things.

> Let me postulate a rule of good programming practice, and you can let
> me know if you agree with it or not. If I define an assignment
> operation for a particular type or between any two types, and if I
> also define an equality test between them, then immediately after the
> assignment is executed for instances of those two types, the equality
> test should evaluate to true. For example:
> 
> type1 A;
> type2 B;
> ...
> A = B;
> if ( A == B ) ... // true or you goofed somewhere, dude!

It is a good rule for 80% cases. Unfortunately it is not always possible to 
follow it. The real-world is more complicated than one might think. A pair 
examples:

1. A refers a hardware register. So A = 2, initiates I/O (read from A/D 
converter port Base + 2) and as a result A becomes 123!

2. A is a fuzzy set, then A==B is a pair of confidence factors, which 
cannot be tested in "if".

and so on and so far.

> Note that it will not always make sense to define the assignment
> operator and/or the equality test operator for every possible
> combination of types, and my rule applies only when they are both
> defined. Unless you disagree with this rule,

> you must agree that there
> is indeed a very close relationship between assignment and equality
> testing, and your earlier claim that they have "nothing to do" with
> each other is nonsense. And so is the notion that "=" should not be
> used for assignment.

The above is a wrong logic. Surely there is a very tight relation between 
"+" and "-" for some types, should then "+" be denoted as "-"? "Related" 
does not mean "same". I didn't claimed that assignment and equality have 
nothing to do with each other, I claimed that their semantcis does.

>> >> In fact assignment (semantic of) has nothing to do with equality. You
>> >> may have incomparable objects which can be assigned. You may have
>> >> comparable objects that cannot be assigned. You may have objects which
>> >> have several different semantics for assignment (deep/shallow
>> >> copy/reference) and equality (distance/set equality etc).
>> >
>> >That's really all irrelevant to the main point here. If you have two
>> >different objects A and B of the SAME type,
>> 
>> What is for two types to be SAME? It is not an easy question as one
>> might think.
>> 
>> > then
>> >
>> >someclass A, B;
>> >A = B;
>> >if ( A == B ) ... // better be true!
>> 
>> But then if you would insist that it should be so in strict
>> mathematical set-theoretic sense, I would derive from that, that also
>> 
>> A'Address = B'Address -- better be true!
> 
> In C++ you can define the "==" operator for any two types any way you
> wish. Your particular definition depends on the problem you are trying
> to solve, of course. But in most cases you probably would not be
> testing whether the two objects are actually one and the same object.

Sometimes I will. Consider UNIX-like processes. A meaningful assignment 
would kill the target and replace it with a clone of the source. A 
meaningfull equality would test if both processes are the same process.

>> If A and B are SAME then there should be no way to distingush them.
>> From programming point of view it has in most cases no sense [however,
>> see LSP]. "==" is not equality it only models one of many possible.
> 
> But I contend it should at least be consistent with your assignment
> operator for the type or types it applies to.

It is a good practice. But agian, "*" should be [when possible] consistent 
with "+", which by no means forces us to use the same symbol for both.

>> >If this doesn't evaluate to true, you have goofy code. Yes, I realize
>> >that asignment can be overloaded in C++ in all kinds of ways, but
>> >that's really a distraction. Your claim that "assignment has nothing
>> >to do with equality" is just plain wrong. Nothing to do with it? Give
>> >me a break!
>> 
>> You can start to define what is equality of two fuzzy sets. What is
>> equality of two floating-point numbers. What is equality of two remote
>> servers. What is equality of two people. Go on.
> 
> As I'm sure you well know, good programmers rarely test for exact
> equality of two floating point numbers. And if you can test for exact
> equality of two fuzzy sets, how "fuzzy" can they be? Perhaps I am
> missing your point here. Do you have one?

The point is that though a set-theoretic equality might be defined, for 
some types it might appear unusable for them, like for floating-points or 
fuzzy sets. For other things it cannot be defined at all, yet alternative 
equality definitions might have sense for them. So there are situations 
when reasonable defined assignment and equality are not conformant with 
your proposition.

-- 
Regards,
Dmitry Kazakov
www.dmitry-kazakov.de



  parent reply	other threads:[~2002-06-20 21:42 UTC|newest]

Thread overview: 188+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-06-14  7:21 status of Ada STL? Russ
2002-06-14 16:29 ` Stephen Leake
2002-06-14 18:44 ` Ted Dennison
2002-06-14 20:34 ` Ehud Lamm
2002-06-15 18:52   ` Russ
2002-06-16  2:42     ` David Marceau
2002-06-16  8:07     ` Pascal Obry
2002-06-16 18:23       ` Russ
2002-06-16 19:01         ` Pascal Obry
2002-06-16 19:04         ` Vinzent Hoefler
2002-06-17  1:59           ` Jeffrey Carter
2002-06-17  6:48             ` Russ
2002-06-17  7:04               ` Dale Stanbrough
2002-06-18  6:16                 ` Russ
2002-06-19  1:07                   ` Dale Stanbrough
2002-06-17  9:38               ` chris.danx
2002-06-17 15:53               ` Ted Dennison
2002-06-18  7:52                 ` Russ
2002-06-18 10:57                   ` chris.danx
2002-06-18 14:38                   ` Robert A Duff
2002-06-18 16:19                     ` Brian Rogoff
2002-06-18 17:12                       ` Frank J. Lhota
2002-06-18 18:03                         ` Brian Rogoff
2002-06-18 19:24                           ` Frank J. Lhota
2002-06-18 19:41                             ` Brian Rogoff
2002-06-25  0:02                         ` Steven Deller
2002-06-25  1:24                           ` Yet another assignment variation (was Re: status of Ada STL?) Dale Stanbrough
2002-06-25 12:53                             ` Frank J. Lhota
2002-06-25 17:48                             ` Georg Bauhaus
2002-06-26  3:13                             ` Robert A Duff
2002-06-18 19:03                     ` status of Ada STL? Robert A Duff
2002-06-18 19:54                       ` Brian Rogoff
2002-06-18 21:09                         ` Robert A Duff
2002-06-18 23:36                           ` Brian Rogoff
2002-06-19  1:37                             ` Robert A Duff
2002-06-19 16:25                               ` Brian Rogoff
2002-06-19 18:53                                 ` Robert A Duff
2002-06-19 20:23                                   ` Brian Rogoff
2002-06-19  3:57                           ` Russ
2002-06-18 21:55                   ` Dmitry A.Kazakov
2002-06-19  5:32                     ` Russ
2002-06-19 12:37                       ` Dmitry A. Kazakov
2002-06-20  6:50                         ` Russ
2002-06-20 12:21                           ` Ted Dennison
2002-06-20 21:42                           ` Dmitry A.Kazakov [this message]
2002-06-20 18:20                             ` Russ
2002-06-21 10:27                               ` Dmitry A. Kazakov
2002-06-20 18:21                             ` Russ
2002-06-20 19:09                             ` Russ
2002-06-17 17:16               ` Pascal Obry
2002-06-18  5:27                 ` Russ
2002-06-17 17:17               ` Pascal Obry
2002-06-17 21:40             ` Vinzent Hoefler
2002-06-17  5:20           ` Russ
2002-06-17  8:22             ` chris.danx
2002-06-17 14:00               ` Frank J. Lhota
2002-06-17 15:57               ` Marin David Condic
2002-06-18  6:12               ` Russ
2002-06-18  8:16                 ` chris.danx
2002-06-18 14:52                   ` Robert A Duff
2002-06-18 16:02                     ` Pascal Obry
2002-06-18 16:54                       ` Hyman Rosen
2002-06-18 22:58                         ` Jacob Sparre Andersen
2002-06-18 19:09                     ` Robert A Duff
     [not found]                     ` <ud6uolglz.fsf@w <wccsn3kxv3g.fsf@shell01.TheWorld.com>
2002-06-19  8:09                       ` Pascal Obry
2002-06-19  3:04                   ` Russ
2002-06-19 16:40                     ` Hyman Rosen
2002-06-19 18:07                       ` Brian Rogoff
2002-06-18  9:37                 ` Fraser Wilson
2002-06-18 15:45                   ` Hyman Rosen
2002-06-19 16:55                   ` Robert I. Eachus
2002-06-19 19:13                     ` Robert A Duff
2002-06-20  7:43                       ` Dmitry A.Kazakov
2002-06-22 22:05                       ` Robert I. Eachus
2002-06-17 21:40             ` Vinzent Hoefler
2002-06-18 15:05               ` Robert A Duff
2002-06-18 22:36                 ` Vinzent Hoefler
2002-06-19 12:45                   ` Dmitry A. Kazakov
2002-06-19 14:35                     ` Marin David Condic
2002-06-21 11:03                       ` Dmitry A. Kazakov
2002-06-21 16:58                         ` Mark Biggar
2002-06-22 23:23                           ` Dmitry A.Kazakov
2002-06-27  3:00                       ` David Thompson
2002-06-28 13:36                         ` Marin David Condic
2002-06-30  4:05                           ` Russ
2002-06-30 13:50                             ` Ted Dennison
2002-07-01 13:12                             ` Marin David Condic
2002-07-02 19:56                           ` Robert A Duff
     [not found]                           ` <bebbba07.0206292005.45ad915a@p <wcc4rfhj43l.fsf@shell01.TheWorld.com>
2002-07-02 20:40                             ` Pat Rogers
2002-06-18 15:21             ` Robert A Duff
2002-06-19  0:34               ` tmoran
2002-06-19  2:55               ` Russ
2002-06-19  4:53                 ` Ted Dennison
2002-06-19  8:21                 ` Pascal Obry
2002-06-19 14:52                 ` Stephen Leake
2002-06-20  1:45                 ` SteveD
2002-06-20  2:01                   ` Ted Dennison
2002-06-16 20:01         ` Pascal Obry
2002-06-17  5:29           ` Russ
2002-06-16 23:02         ` Ted Dennison
2002-06-17  5:07           ` Russ
2002-06-17 14:03             ` Frank J. Lhota
2002-06-17 14:11             ` Ted Dennison
2002-06-18  5:55               ` Russ
2002-06-18 14:30                 ` Ted Dennison
2002-06-18 15:14                   ` Marin David Condic
2002-06-19 14:19                     ` Ted Dennison
2002-06-19 16:05                       ` Marin David Condic
2002-06-19  5:58                   ` Russ
2002-06-19 14:35                     ` Ted Dennison
2002-06-20  7:06                       ` Russ
2002-06-20 12:27                         ` Ted Dennison
2002-06-20 23:22                           ` Russ
2002-06-21  2:00                             ` Ted Dennison
2002-06-22  4:28                               ` Russ
2002-06-22 15:05                                 ` Ted Dennison
2002-06-21  8:48                             ` Ian Wild
2002-06-22  4:54                             ` Russ
2002-06-20 22:47                   ` Russ
2002-06-21  0:43                     ` Ted Dennison
2002-06-22  4:05                       ` Russ
2002-06-22 14:41                         ` Jano
2002-06-22 20:27                         ` Ted Dennison
2002-06-21 13:12                     ` Marin David Condic
2002-06-24  8:29                       ` Russ
2002-06-24 20:19                         ` Chad R. Meiners
2002-06-18 22:36                 ` Vinzent Hoefler
2002-06-18 22:42                   ` Ed Falis
2002-06-19  0:07                     ` Vinzent Hoefler
2002-06-19  0:07                   ` Vinzent Hoefler
2002-06-17 22:37             ` Dmitry A.Kazakov
2002-06-17 14:09               ` Frank J. Lhota
2002-06-18 21:40                 ` Dmitry A.Kazakov
2002-06-18 16:04         ` Robert A Duff
2002-06-18 16:37           ` Pascal Obry
2002-06-18 18:56             ` Robert A Duff
2002-06-18 22:20               ` Pascal Obry
2002-06-19 12:53               ` Dmitry A. Kazakov
2002-06-19  3:37           ` Russ
2002-06-19  8:31             ` Pascal Obry
2002-06-20  7:58               ` Russ
2002-06-20 20:34                 ` Pascal Obry
2002-06-21  4:07                   ` Russ
2002-06-17 15:33     ` Marin David Condic
2002-06-18 10:28       ` Adrian Hoe
2002-06-19  7:58         ` Ole-Hjalmar Kristensen
2002-06-19 13:55           ` Marin David Condic
2002-06-19 13:52         ` Marin David Condic
2002-09-18 15:23           ` Matthew Heaney
2002-09-19 12:11             ` Marin David Condic
2002-09-19 14:13               ` Hyman Rosen
2002-09-20 12:24                 ` Marin David Condic
2002-09-22  7:22                   ` Kevin Cline
2002-09-23 13:55                     ` Hyman Rosen
2002-09-19 19:42               ` Randy Brukardt
2002-09-20 12:38                 ` Marin David Condic
2002-09-27 21:21                   ` Michael Bode
2002-09-27 22:11                     ` Pat Rogers
2002-09-28 13:25                       ` Marin David Condic
2002-09-28 14:52                         ` Pat Rogers
2002-09-28 15:18                           ` Martin Dowie
2002-09-29 18:02                           ` Marin David Condic
2002-09-29 19:02                             ` Jeffrey Carter
2002-09-30  1:36                               ` Marin David Condic
2002-10-02 22:17                     ` Matthew Heaney
2002-09-28 17:25                 ` Richard Riehle
2002-09-30 17:12                   ` Marin David Condic
2002-10-01 18:41                     ` Randy Brukardt
2002-10-02  8:38                       ` Jean-Pierre Rosen
2002-10-02 12:43                         ` Marin David Condic
2002-10-02 14:26                           ` Jean-Pierre Rosen
2002-10-02 12:30                       ` Marin David Condic
2002-06-18  1:56     ` SteveD
2002-06-18 14:12       ` Robert A Duff
2002-06-18 14:28         ` chris.danx
2002-06-18 15:59           ` Pascal Obry
2002-06-18 18:58           ` Robert A Duff
2002-06-18 19:58           ` Randy Brukardt
2002-06-19 14:07             ` Marin David Condic
2002-06-19  2:19         ` SteveD
2002-06-18 11:40     ` Colin Paul Gloster
2002-06-20 15:15       ` Colin Paul Gloster
2002-06-18 19:34     ` Mike Silva
2002-06-25 16:31     ` Kevin Cline
2002-06-14 20:34 ` Dan Andreatta
  -- strict thread matches above, loose matches on Subject: below --
2002-06-17 11:05 Grein, Christoph
2002-06-18  5:36 ` Russ
2002-06-26 10:50 Grein, Christoph
replies disabled

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