comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Ada202X: Easy to use "UML private"-like components
Date: Tue, 25 Jun 2013 00:40:37 +0300
Date: 2013-06-25T00:40:37+03:00	[thread overview]
Message-ID: <b2rsmlFpmvmU1@mid.individual.net> (raw)
In-Reply-To: <kqa9ll$ba8$1@loke.gir.dk>

On 13-06-24 23:20 , Randy Brukardt wrote:
> "Robert A Duff" <bobduff@shell01.TheWorld.com> wrote in message 
> news:wccr4ftko44.fsf@shell01.TheWorld.com...
>> Niklas Holsti <niklas.holsti@tidorum.invalid> writes:
>>
>>> Maybe my post was unclear: I tried to contradict Bob Duff's recollection
>>> that an opaque type in Modula-2 is more like an Ada private type than
>>> like an "stt access type". I think that a Modula-2 opaque type is very
>>> similar to an "stt access type". Do you agree with me?
>>
>> Yes, given your quotes from Wirth, I agree that Modula-2 opaque types
>> are much like stt access types.

Good (but I don't know if my quote is from Wirth; it was from the web
page I cited).

>> I had remembered the restriction
>> differently:  the type was required to fit in the size of a pointer,
>> which included integers and enums and small records.

That seems likely to create program-portability problems - on a 64-bit
machine, a 64-bit record could be opaque, but it could not be opaque on
a 32-bit machine (unless all pointers are artificially made 64 bits
wide, too).

>> Probably the
>> Modula-2 compiler I used had a nonstandard extension -- or else I am
>> misremembering.
> 
> My recollection matches yours, Bob. Perhaps the rule was changed in later 
> versions of the language.

The Wikipedia entry on Modula-2 refers to several dialects of Modula-2,
of which the "PIM" dialect (from the book "Programming in Modula-2") is one.

The rules for opaque types do seem to vary between dialects; for
example, the site
http://freepages.modula2.org/report4/modula-2.html#SEC43 says: "Opaque
export is restricted to pointers and to subranges of standard types."

> In any case, the Modula-2 obaque type is *not* a 
> pointer type, so in that sense it is much more like an Ada private type than 
> an access type of any sort.

I can agree, if we consider only the user's point of view. Both opaque
types and stt-access-types are declared as private -- the user (client)
does not see their structure or nature.

However, even for the more permissive Modula-2 dialects, for example the
one quoted earlier in this post, I would guess that most cases of opaque
types in practice use pointers, to avoid the size restrictions.

The main difference is that in Ada, the unknown underlying type is named
-- what you call the stt-incomplete type. This type is of course
invisible to the users (clients) of the private type. Off hand, it does
not seem to me that such named-but-incomplete types should cause hard
problems for the compiler, but it appears that you have experienced such
problems. Perhaps they did not exist in Ada 83, but came about because
of other extensions such as controlled types?

> (I.e., I don't buy this analogy, especially as 
> there isn't any such thing as an stt-access-type -- the operative thing is 
> an stt-incomplete-type, which is nothing like a Modula-2 opaque type. The 
> access type is completely normal, its the designated object that's special.)

As I have understood it, the private definition of the stt-access-type
as an access to the stt-incomplete-type is simply an idiom, or trick, to
achieve the same effect as a Modula-2 opaque type, without introducing
the new concept "opaque" into Ada. That it gives a name to the
stt-incomplete-type is perhaps unfortunate, from the compiler-writer's
point of view.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
      .      @       .


  reply	other threads:[~2013-06-24 21:40 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-21  8:43 Ada202X: Easy to use "UML private"-like components Martin
2013-06-21  9:23 ` Dmitry A. Kazakov
2013-06-21  9:33   ` Martin
2013-06-21 10:14     ` G.B.
2013-06-21 11:19       ` Martin
2013-06-21 14:51     ` Dmitry A. Kazakov
2013-06-22 11:16       ` Martin
2013-06-22 12:10         ` Dmitry A. Kazakov
2013-06-21 18:36 ` Robert A Duff
2013-06-22 16:41   ` Niklas Holsti
2013-06-22 19:05     ` Dennis Lee Bieber
2013-06-22 22:57       ` Niklas Holsti
2013-06-23  3:26         ` Dennis Lee Bieber
2013-06-23  7:32           ` Niklas Holsti
2013-06-23 13:12             ` Robert A Duff
2013-06-23 14:06               ` Dmitry A. Kazakov
2013-06-23 15:15                 ` Robert A Duff
2013-06-23 18:52                   ` Dmitry A. Kazakov
2013-06-23 23:38                     ` Robert A Duff
2013-06-24  7:16                       ` Dmitry A. Kazakov
2013-06-24 20:11                         ` Randy Brukardt
2013-06-25  7:21                           ` Dmitry A. Kazakov
2013-06-25 19:06                             ` Randy Brukardt
2013-06-24 20:07                 ` Randy Brukardt
2013-06-23 14:40               ` Shark8
2013-06-23 15:28                 ` Robert A Duff
2013-06-23 18:14                   ` Bill Findlay
2013-06-23 23:43                     ` Robert A Duff
2013-06-23 23:48                       ` Bill Findlay
2013-06-24 20:16                   ` Randy Brukardt
2013-06-24 20:05               ` Randy Brukardt
2013-06-25  1:09                 ` Robert A Duff
2013-06-25 19:37                   ` Randy Brukardt
2013-06-23 12:28         ` Robert A Duff
2013-06-24 20:20           ` Randy Brukardt
2013-06-24 21:40             ` Niklas Holsti [this message]
2013-06-25  0:43               ` Robert A Duff
2013-06-25 19:23                 ` Randy Brukardt
2013-06-25 19:19               ` Randy Brukardt
2013-07-09 11:24   ` Martin
2013-07-09 14:39     ` Simon Wright
2013-07-10  7:03       ` Martin
2013-07-09 21:43     ` Robert A Duff
2013-07-10  6:34       ` Martin
2013-07-10  8:24         ` Dmitry A. Kazakov
2013-07-10 13:06           ` Martin
2013-07-10 16:12     ` Simon Wright
2013-07-10 18:22       ` Martin
2013-07-10 19:41         ` Simon Wright
2013-07-11 18:28           ` Martin
2013-07-11 19:37             ` Simon Wright
2013-07-11 20:43               ` Martin
2013-07-12  6:57                 ` Simon Wright
2013-07-12  8:05                   ` Martin
replies disabled

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