comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Package's private parts and protected types
Date: Thu, 11 Feb 2010 18:46:23 -0500
Date: 2010-02-11T18:46:23-05:00	[thread overview]
Message-ID: <wccvde3gwts.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: hkt5n8$kp5$1@munin.nbi.dk

"Randy Brukardt" <randy@rrsoftware.com> writes:

> "Robert A Duff" <bobduff@shell01.TheWorld.com> wrote in message 
> news:wccy6j2mpa0.fsf@shell01.TheWorld.com...
>> AdaMagica <christoph.grein@eurocopter.com> writes:
>>
>>> OK, but then you have a similar problem to Ada83's syntactically
>>> unneeded bodies which Ada95 solved with a pragma.
>>
>> I think that problem is an illusion.  There was a problem,
>> but it was a problem with implementations, not with the
>> language.  How do we know if a given package spec has
>> a body?  Simple: look on the disk and see if there's
>> a source file containing that body.  In GNAT, that would
>> mean looking for foo.adb.
>
> I think you're forgetting how this happens in practice. And the actual 
> problem with Ada 83, which was that a unneeded unit with an error had to be 
> ignored when linking.

Well, that's what the Ada 83 RM seemed to require.  I thought so
at the time.  But later I realized that the RM could be interpreted
to mean something different -- after all, it doesn't actually
talk about "linking".

>...(The ACVC used to insist on that.)

Yeah.  The implementers should have fought against that,
rather than damaging their compilers.

Or, they could at least have given warnings, which is good
enough to solve the problem.

Or fix the problem in the "build" command (I mean gnatmake
or whatever).

>... Ada surely needed a 
> fix to that problem, and it wasn't one with the implementations -- at least 
> not until they were changed to match the ACVC. (I remember doing that in 
> Janus/Ada, it was a lot of work and it made things worse for users. 
> Wonderful.)
>
> Moreover, it is easy to imagine errors that would cause the unit to no 
> longer be the body (such as misspelling the name, or misspelling "body"), at 

I see your point about misspelling the name.  But misspelling "body"?
That would just be a syntax error.

> which point the implementation would have to guess. But the problem of a 
> body that the programmer expected to be included being left out would 
> continue.

But the so-called "solution" in Ada 95 didn't actually solve anything.
Early versions of GNAT had the same bug -- they ignored a non-required
body, simply by saying it's not part of the program library.
That was fixed because it's bad behavior, not because it failed
to conform to the Ada 95 rules.

>...So while I don't doubt that implementations could have reduced the 
> problem (in the absense of the ACVC test - the main thing I wanted from Ada 
> 95 was to change the rules enough to repeal that stupid test!), they 
> couldn't have fixed it completely. Surely the same dynamic would occur for a 
> separate private part.
>
> I'm also dubious of the basic idea. I suppose you could keep the private 
> part in a separate file, but I can't imagine any useful way to *compile* it 
> separately (you'd have to have both parts available in order to do any sort 
> of code generation).

I don't think you need to look at the private part to generate code.
If you change it to "to generate efficient code", then I'll agree.

>...So there wouldn't be much, if any, advantage in terms 
> of development.

I disagree -- I think there are big advantages to storing the
private part in a separate file.  I don't much care what files
the compiler wants to look at, so long as it's not too slow.

The private part is part of the implementation.  It's useful
to manage it separately in your CM system (and CM systems
are file based).  Consider, for example, a visible part
that has multiple implementations (maybe target dependent),
selected by the build scripts.  It's really annoying to
have to duplicate the visible part.

>... (For Janus/Ada, at least, every source file is compiled 
> separately, and code is generated as necessary without needing anything 
> other than direct semantic dependencies to have been previously compiled. 
> That model is impossible for separate private parts; the specification would 
> not contain enough information to generate any code or any code for calls to 
> it.)

This seems backwards.  Of course you chose a compilation model
based on the rules of Ada (Ada 83, in fact).  But I'm speculating
about what Ada should have been -- a language very similar
to Ada, but slightly different.  You can't argue against such
a language by saying existing Ada compilers can't handle it.
If Ada had been designed differently, then so would the compilers
have been.

Ada allows recursion.  Therefore, an Ada implementation must
use a stack.  I can't say, "I want to statically allocate
all variables at link-time-known addresses."  Sorry, that's
just a wrong implementation of Ada.  It's not a valid argument
against allowing recursion.

- Bob



  reply	other threads:[~2010-02-11 23:46 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-08  4:30 Package's private parts and protected types Hibou57 (Yannick Duchêne)
2010-02-08  8:30 ` Martin
2010-02-08  9:11   ` Hibou57 (Yannick Duchêne)
2010-02-08 10:10     ` Alex R. Mosteo
2010-02-08 10:46       ` Hibou57 (Yannick Duchêne)
2010-02-09 14:55         ` Alex R. Mosteo
2010-02-08 10:20   ` Dmitry A. Kazakov
2010-02-08 10:54     ` Hibou57 (Yannick Duchêne)
2010-02-08 10:58       ` Hibou57 (Yannick Duchêne)
2010-02-08 11:01       ` Dmitry A. Kazakov
2010-02-08 13:19         ` Georg Bauhaus
2010-02-08 15:17         ` Robert A Duff
2010-02-08 16:15           ` (see below)
2010-02-08 20:44             ` Robert A Duff
2010-02-08 22:00               ` Hibou57 (Yannick Duchêne)
2010-02-09  5:48               ` AdaMagica
2010-02-09 14:56                 ` Robert A Duff
2010-02-10  2:29                   ` Randy Brukardt
2010-02-11 23:46                     ` Robert A Duff [this message]
2010-02-12  1:29                       ` Randy Brukardt
2010-02-11 23:53                     ` Robert A Duff
2010-02-12  1:10                       ` Randy Brukardt
2010-02-10 16:05                   ` Adam Beneschan
2010-02-10 20:17                     ` sjw
2010-02-12  0:05                     ` Robert A Duff
2010-02-12 11:07                       ` Stephen Leake
2010-02-12 15:01                         ` Robert A Duff
2010-02-13  8:00                           ` Stephen Leake
2010-02-09  9:04               ` stefan-lucks
2010-02-08 17:11           ` Jeffrey R. Carter
2010-02-08 14:56       ` Robert A Duff
2010-02-08 15:36         ` Dmitry A. Kazakov
2010-02-08 16:06           ` Robert A Duff
2010-02-08 17:46             ` Jean-Pierre Rosen
2010-02-08 20:39               ` Robert A Duff
2010-02-08 21:54                 ` Hibou57 (Yannick Duchêne)
2010-02-08 21:50               ` Hibou57 (Yannick Duchêne)
2010-02-08 22:04         ` Hibou57 (Yannick Duchêne)
2010-02-09 10:58         ` Hibou57 (Yannick Duchêne)
2010-02-09 14:47           ` Robert A Duff
2010-02-09 19:34             ` Hibou57 (Yannick Duchêne)
2010-02-09 20:19               ` Hibou57 (Yannick Duchêne)
2010-02-09 23:29               ` Robert A Duff
2010-02-10  2:39               ` Randy Brukardt
2010-02-10  5:12                 ` Hibou57 (Yannick Duchêne)
2010-02-10  7:17                   ` Hibou57 (Yannick Duchêne)
2010-02-10 16:09                   ` Robert A Duff
2010-02-10 22:21                     ` Hibou57 (Yannick Duchêne)
2010-02-11  0:48                       ` Robert A Duff
2010-02-09  0:48     ` Randy Brukardt
2010-02-09 12:43     ` Hibou57 (Yannick Duchêne)
replies disabled

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