comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Extending a third party tagged type while adding finalization
Date: Thu, 7 Dec 2017 17:22:41 -0600
Date: 2017-12-07T17:22:41-06:00	[thread overview]
Message-ID: <p0cig1$7b6$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: p0auie$h5h$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:p0auie$h5h$1@gioia.aioe.org...
> On 07/12/2017 02:13, Randy Brukardt wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:p07343$1tst$1@gioia.aioe.org...
>>> On 2017-12-05 22:09, Randy Brukardt wrote:
>> ...
>> The above
>> is much too complex. It could be simplified a lot:
>>
>> An ADT is a data type (from the perspective of a client of a type) 
>> defined
>> solely by the operations defined for that data type.

This was a bit sloppy; it should also have required the operations to be 
defined explicitly and as a closed set of operations.

> 1. That does not apply to Ada since it has named type matching. Therefore 
> you can have two different types with identical operations.

This doesn't seem relevant. I don't see anything in my definition that 
prevents one from having two different but identical ADTs. If you think 
there is, imagine whatever words you think would be needed to have that 
effect.

> 2. You cannot do anything with a type otherwise than through its 
> operations. So the definition would be useless without splitting 
> operations into "operations operations" and not "quite operations", which 
> you apparently trying to do.

Definitely. As I mentioned earlier, there is a closed, finite set of 
operations involved in an ADT. There can be other operations that are built 
on the set of operations, but they are definitely not part of the ADT. If 
the set of operations is not closed, then one cannot abstractly reason about 
the ADT, defeating the purpose of the definition. (It also defeats 
reusability, which is rather the point of defining ADTs in the first place.

>> For Ada, this means that an ADT is a private type (possibly tagged) with
>> (usually explicit) primitive operations, and that there are no end-runs 
>> on
>> those primitive operations. All other uses of the ADT are built out of 
>> those
>> primitives.
>
> Why does it follow?
>
> 1. Private type means that parts of the representation is hidden. Your 
> definition is not related to that.

All of the operations need to be explicit and a closed set. If the 
representation is not hidden, that cannot be true. QED. (Yes, my definition 
was sloppy. So what?)

> 2. Primitiveness of an operation is not related either.

If the type is private, the operations have to be declared there, and that 
makes them primitive. (No Ada ADTs outside of an Ada package.)

>> If a type is not private, it cannot be an ADT, as it provides an 
>> unlimited
>> number of other operations that are not described explicitly.
>
> How primitiveness changes that? I still can define new subprograms taking 
> and returning values of the type regardless.

If they're not part of the package, then they are operations that use the 
ADT, but are not part of the ADT. For many programs, most of the code is 
built on ADTs but are not themselves part of any ADT (because they require 
the services of many ADTs - which one does it belong to? Any answer is 
arbitrary).

...
>> With the
>> Wikipedia definition above, every Ada data type is an ADT, since every 
>> type
>> can be described this way (every operation on a numeric type is described 
>> by
>> the Ada Standard, after all, and a client can use nothing else). That's a
>> completely useless definition.
>
> ADT is the semantics it implements. You first have the semantics 
> (mathematical model of the problem space) and then an implementation of.
>
> Non-ADT is ad-hoc semantics deduced from a given representation. You take 
> 'int' from the compiler and then try to figure out if it can be useful for 
> you.
>
> That is the difference.

Based on this definition, almost nothing should be an ADT, because very 
little can be described only by its semantics. Humm, that's actually a true 
statement; probably we are feeling different parts of the elephant and 
describing it very differently. Still, you seem to think of an ADT as a 
constantly increasing (and ad-hoc) set of operations, while I view only the 
operations declared directly with the (private) type as part of the ADT. 
Reasoning ability alone requires a minimum set of operations (but I wouldn't 
want to require that explicitly in a definition lest programmers get tied up 
trying to eliminate excess operations -- not worth the work).

                                    Randy.



  reply	other threads:[~2017-12-07 23:22 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-22 12:43 Extending a third party tagged type while adding finalization Jere
2017-11-22 16:42 ` AdaMagica
2017-11-26 17:33   ` Jere
2017-11-26 18:15     ` Dmitry A. Kazakov
2017-11-26 19:31       ` Jere
2017-11-27  9:46     ` AdaMagica
2017-11-27 12:56       ` Jere
2017-11-27 15:00         ` AdaMagica
2017-11-27 16:38           ` Jere
2017-11-27 18:37             ` AdaMagica
2017-11-27 19:53               ` Jere
2017-11-28 11:48                 ` AdaMagica
2017-12-03  2:22                   ` Jere
2017-12-03 21:53               ` Robert Eachus
2017-12-04  7:58                 ` Dmitry A. Kazakov
2017-12-04 14:59                   ` Robert Eachus
2017-12-04 15:39                     ` Dmitry A. Kazakov
2017-11-27 18:10     ` Shark8
2017-11-27 19:56       ` Jere
2017-11-28  1:55       ` Randy Brukardt
2017-12-03  2:47         ` Jere
2017-12-03  9:29           ` Dmitry A. Kazakov
2017-12-03 15:10             ` AdaMagica
2017-12-03 16:39               ` Dmitry A. Kazakov
2017-12-03 19:34             ` AdaMagica
2017-12-03 19:41               ` Dmitry A. Kazakov
2017-12-04 12:38                 ` AdaMagica
2017-12-04 13:19                   ` AdaMagica
2017-12-04 13:55                     ` Dmitry A. Kazakov
2017-12-04 15:44                       ` AdaMagica
2017-12-04 16:19                         ` Dmitry A. Kazakov
2017-12-04 20:54           ` Randy Brukardt
2017-12-04 21:02             ` Dmitry A. Kazakov
2017-12-05 21:09               ` Randy Brukardt
2017-12-05 21:29                 ` Dmitry A. Kazakov
2017-12-07  1:13                   ` Randy Brukardt
2017-12-07  8:36                     ` Dmitry A. Kazakov
2017-12-07 23:22                       ` Randy Brukardt [this message]
2017-12-08  9:30                         ` Dmitry A. Kazakov
2017-12-09  0:17                           ` Randy Brukardt
2017-12-11  9:03                             ` Dmitry A. Kazakov
2017-12-11 22:42                               ` Randy Brukardt
2017-12-12 16:11                                 ` AdaMagica
2017-12-12 20:08                               ` G. B.
2017-12-12 20:32                                 ` 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