From: Dale Stanbrough <dstanbro@bigpond.net.au>
Subject: Re: Visibility of private packages??
Date: Wed, 31 Jul 2002 12:06:39 GMT
Date: 2002-07-31T12:06:39+00:00 [thread overview]
Message-ID: <dstanbro-8DD764.22063931072002@news-server.bigpond.net.au> (raw)
In-Reply-To: 3d47a99e.4548109@news.demon.co.uk
Peter.Coventry@gdcanada.com wrote:
>
> >I am trying to get my head around the visibility rules applicable to private
> >packages.
> >
> >If I have the following package hierarchy:
> >
> > A
> > / \
> > A.B1 A.B2
> > /
> > A.B1.C1
> >
> >A.B1 contains the interface that I wish to export to clients (i.e a type
> >plus routines for client manipulation).
> >A.B1.C1 contains additional routines for the type not meant for client use.
> >A.B2 contains some inner workings, that need to use the additional routines
> >in A.B1.C1.
> >
> >I want to make A.B1.C1 a private package to stop it from being misused by
> >clients, however the compiler disallows it, citing RM 10.1.2(8):
> >
> >" If a with_clause of a given compilation_unit mentions a private child of
> >some library unit, then the given compilation_unit shall be either the
> >declaration of a private descendant of that library unit or the body or
> >subunit of a (public or private) descendant of that library unit."
> >
> >Does this mean that if A.B1.C1 is private, it can only be withed by the
> >bodies of A.B1 and other descendants of A.B1, and specs of private packages
> >of descendants of A.B1?
Yes, that's correct. I think this is a case where the designers got it
wrong. The current rules prevent "compilation coupling", that is any
change to a private package will never result in the need to recompile
a package outside of the hierachy.
A laudible aim, but too restrictive IMHO. It would have been better
to simply restrict the use of types defined in a private spec to
either the private part of a package spec, or the package body.
This would allow you to, for example, complete a private type
declaration with a type derived from a private package, or a
structure with a private component.
E.g.
private package a.b is
type hidden is <something>
end a.b;
with a.b;
package a.c is
type not_hidden is private;
private
type not_hidden is new a.b.hidden;
end;
The change could be made, and it would not be incompatable with
existing programs.
Dale
next prev parent reply other threads:[~2002-07-31 12:06 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-30 21:23 Visibility of private packages?? Peter Coventry
2002-07-31 9:13 ` John McCabe
2002-07-31 12:06 ` Dale Stanbrough [this message]
2002-07-31 13:30 ` Robert A Duff
2002-08-14 1:16 ` Randy Brukardt
2002-08-14 9:53 ` Dale Stanbrough
2002-08-14 17:03 ` Robert Dewar
2002-08-14 19:42 ` Randy Brukardt
2002-07-31 11:55 ` Jean-Pierre Rosen
2002-07-31 13:22 ` Mark Doherty
2002-07-31 17:43 ` Anh_Vo
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox