comp.lang.ada
 help / color / mirror / Atom feed
From: Nick Roberts <nick.roberts@acm.org>
Subject: Re: Possible Ada deficiency?
Date: Sun, 9 Jan 2005 18:41:56 +0000
Date: 2005-01-09T18:41:56+00:00	[thread overview]
Message-ID: <gemini.ia2bxv002sq5o02vo.nick.roberts@acm.org> (raw)
In-Reply-To: wccwtun9481.fsf@shell01.TheWorld.com

Robert A Duff <bobduff@shell01.TheWorld.com> wrote:

> Nick Roberts <nick.roberts@acm.org> writes:
> 
> > I've heard the same, and I think it might be correct. There's no real
> > technical barrier to types being completed in the body, other than it
> > might cause some compilers to have to (effectly) make an extra pass.
> > (Correct?)
> 
> I'm not sure what you mean by "extra pass".  The issue is whether the
> compiler looks at the body while compiling clients.

Yes, sorry, that's what I should have said.

> The main thing is that the compiler needs to know the size of a private
> type in order to allocate things, unless it treats all private types as
> dynamic-sized, which would be annoying -- you shouldn't have to pay an
> efficiency cost to get the benefits of encapsulation, information hiding,
> etc.  So if the full type were in the body, the compiler would have to
> look at the body (at least in optimizing mode).

I agree completely.

> And if the compiler looks at the body, then you have to recompile all the
> clients when the body changes (unless you're doing fancy incremental
> compilation -- that's the kind of compiler I'd really like to have!).

I don't think it would have to be that fancy. A simple but effective
strategy would be for the compiler to remember the size of each private type
(completed in the body), and recompile library units dependent on the
specification if any of these types changed size. In addition, it might
recompile library units which use (call or instantiate) an inline subprogram
or generic unit if the body of that subprogram or generic unit got changed.

> Another point is that the rules about whether to pass by copy or by
> reference depend on the full type.  I don't much like that, but anyway,
> the compiler would have to look at the body to find out, unless the
> decision is made at run time, which would be grossly inefficient.

Again, the compiler could simply remember the category of each full type
(elementary, tagged, task or protected, composite with by-reference
subcomponent), and recompile as necessary if it got changed.

> So I guess the Ada 83 designers invented the private part so the compiler
> wouldn't have to look at the body to generate efficient code. But the
> compiler has to look at the body anyway, in order to implement generics
> (unless they are always code-shared) and pragmas Inline. So the decision
> seems somewhat inconsistent to me.

Exactly. I couldn't agree more. And for a compiler that is to perform global
optimisations anyway, almost pointless. Obviously, the practicality of such
compilers was generally less in the early 1980s than it is now.

> If JDI had not invented private parts, so we just had spec and body, and
> all the hidden stuff goes in the body, then when Tucker came along and
> invented child packages, he would have given them visibility into the
> body.  And we'd be having this same discussion about how do you prevent
> evil children from seeing what they shouldn't.  I still think the right
> answer is to restrict which children are allowed, rather than to have yet
> another special visibility rule.

I suppose it is slightly idle speculation (not that I'm averse to idle
speculation ;-) but I think we all have our own ideas about how the perfect
language should have been. (By the way, on a historical note JDI stands for
'Jean Ichbiah', the leader of the team who developed the Ada 83 standard.)

One idea would have been to eliminate the principle of having to declare
things in advance of their use. Ada takes this approach to goto labels, in
fact. When something was used, for example a procedure call:

   Foo(Bar,Hum);

the compiler would simply note the need for an object Bar, and an object
Hum, and a procedure with profile Foo(Bar'Type,Hum'Type).

At the end of the compilation process, the compiler would say "Was there a
declaration of an object Bar?" Assuming there was, its type must now be
known, let's say T1. The compiler would do the same thing with Hum, let's
say its type was T2. Then the compiler would say "Was there a declaration of
a procedure fitting profile Foo(T1,T2)?" If there wasn't, or if there was an
ambiguity, it could report the error.

This way, package specifications wouldn't be needed. You would actually have
a private part in the body, which would contain the declarations of things
not to be exported.

Of course, this approach didn't fit the prevailing compilation model of
those days (the 1980s). Just an idle thought.

-- 
Nick Roberts



  parent reply	other threads:[~2005-01-09 18:41 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-31 18:15 Possible Ada deficiency? danmcleran
2004-12-31 19:12 ` Jeffrey Carter
2005-01-01  1:52   ` danmcleran
2005-01-01  2:37     ` Jeffrey Carter
2005-01-01  2:02   ` danmcleran
2005-01-01 14:11     ` Martin Krischik
2005-01-01 15:27       ` danmcleran
2005-01-02 17:49         ` Martin Krischik
2005-01-01 15:30     ` Stephen Leake
2005-01-01 15:57       ` danmcleran
2005-01-03 23:37         ` Randy Brukardt
2005-01-07 17:26           ` Nick Roberts
2005-01-07 18:26             ` danmcleran
2005-01-07 21:32             ` Randy Brukardt
2005-01-08  3:56               ` Nick Roberts
2005-01-08 18:15                 ` Robert A Duff
2005-01-08 19:11                   ` Jeffrey Carter
2005-01-08 20:03                     ` Robert A Duff
2005-01-09  3:40                       ` Jeffrey Carter
2005-01-09 17:30                         ` Robert A Duff
2005-01-09 19:24                           ` Jeffrey Carter
2005-01-09 21:56                           ` Nick Roberts
2005-01-10 13:47                             ` Dmitry A. Kazakov
2005-01-10 16:46                               ` Duncan Sands
2005-01-10 17:58                                 ` Pascal Obry
2005-01-10 18:45                                   ` Dmitry A. Kazakov
2005-01-10 19:44                                     ` Pascal Obry
2005-01-11 10:05                                       ` Dmitry A. Kazakov
2005-01-11  7:24                                     ` Vinzent 'Gadget' Hoefler
2005-01-11  9:48                                       ` Dmitry A. Kazakov
2005-01-11 13:57                                         ` Vinzent 'Gadget' Hoefler
2005-01-11 21:52                                           ` Robert A Duff
2005-01-12 11:22                                           ` Dmitry A. Kazakov
2005-01-09 17:23                   ` danmcleran
2005-01-09 17:46                     ` Robert A Duff
2005-01-10  3:05                       ` danmcleran
2005-01-09 18:41                   ` Nick Roberts [this message]
2005-01-09 19:06                     ` Martin Krischik
2005-01-09 20:10                     ` Robert A Duff
2005-01-09 20:15                     ` Robert A Duff
2005-01-11 14:13                       ` Possible Ada deficiency? (goto) Peter Hermann
2005-01-11 14:54                         ` Nick Roberts
2005-01-11 22:15                         ` Robert A Duff
2005-01-12 10:17                           ` Peter Hermann
2005-01-15 17:34                             ` Robert A Duff
2005-01-15 17:58                               ` Dmitry A. Kazakov
2005-01-15 19:34                                 ` Robert A Duff
2005-01-10 20:15                   ` Possible Ada deficiency? Randy Brukardt
2005-01-10 21:51                     ` Robert A Duff
2005-01-11 20:23                       ` Randy Brukardt
2005-01-11 21:24                         ` Robert A Duff
2005-01-12 19:57                           ` Randy Brukardt
2005-01-02 15:51       ` Adrian Hoe
2005-01-04 16:06       ` Peter Hermann
2005-01-01 23:36     ` tmoran
2005-01-02  3:38       ` danmcleran
2004-12-31 19:16 ` Martin Dowie
2005-01-01  2:32   ` Jeffrey Carter
2004-12-31 23:23 ` Nick Roberts
2005-01-01  1:56   ` danmcleran
2005-01-01 11:43 ` Dmitry A. Kazakov
2005-01-01 15:46   ` danmcleran
2005-01-01 17:58     ` Larry Kilgallen
2005-01-01 19:43       ` danmcleran
2005-01-02  0:36         ` Ed Falis
2005-01-02  3:36           ` danmcleran
2005-01-02 15:53             ` Ed Falis
2005-01-07 18:31               ` danmcleran
2005-01-07 18:44                 ` Pascal Obry
2005-01-07 19:29                   ` danmcleran
2005-01-07 21:28                     ` Pascal Obry
2005-01-01 23:28   ` danmcleran
2005-01-02 10:26     ` Dmitry A. Kazakov
2005-01-02 15:51       ` danmcleran
2005-01-03 23:48     ` Randy Brukardt
2005-01-01 14:06 ` Martin Krischik
2005-01-01 15:53   ` danmcleran
2005-01-07 21:33 ` Robert A Duff
2005-01-09 17:15   ` danmcleran
2005-01-09 17:38     ` Robert A Duff
2005-01-10  3:16       ` danmcleran
2005-01-09 18:41     ` Martin Dowie
2005-01-10  3:18       ` danmcleran
2005-01-10 20:32         ` Randy Brukardt
2005-01-10 21:42           ` danmcleran
2005-01-10 21:36         ` Robert A Duff
2005-01-10 21:44           ` danmcleran
2005-01-09 19:01     ` Jeffrey Carter
2005-01-10  3:20       ` danmcleran
2005-01-10 22:16         ` Robert A Duff
2005-01-10 22:29           ` danmcleran
2005-01-11 20:12             ` Georg Bauhaus
2005-01-11 20:30               ` danmcleran
2005-01-11 21:44               ` Robert A Duff
2005-01-11  0:06           ` Jeffrey Carter
2005-01-11  0:46             ` Robert A Duff
2005-01-11 20:37           ` danmcleran
2005-01-11 21:08             ` Robert A Duff
2005-01-17  4:40 ` Tucker
2005-01-18 13:46   ` danmcleran
2005-01-18 21:29     ` Nick Roberts
2005-01-24 17:23   ` danmcleran
  -- strict thread matches above, loose matches on Subject: below --
2004-12-31 19:06 danmcleran
replies disabled

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