This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: Meissner examples - the last one to fall
- From: Richard E Maine <Richard dot Maine at nasa dot gov>
- To: paulthomas2 at wanadoo dot fr
- Cc: Dominique Dhumieres <dominiq at lps dot ens dot fr>, fortran at gcc dot gnu dot org
- Date: Tue, 4 Oct 2005 11:18:50 -0700
- Subject: Re: Meissner examples - the last one to fall
- References: <19464296.1128433797205.JavaMail.www@wwinf1620>
On Oct 4, 2005, at 6:49 AM, Paul THOMAS wrote:
Error: 'rect_inductor' is a PRIVATE type and cannot be a dummy
argument of 'mutual_ind_quad_cir_coil', which is PUBLIC at (1)
In file induct.f90:1824
Yes, I seem not to have understood what comprises a PRIVATE type in
this context, or I have screwed up the implementation.
I didn't go look at induct.f90 to check the context, but the definition
of a PRIVATE type in that context is *very* subtle. I recall the
longish J3 discussions about the related interps. The short version
(omitting all the supporting rationale, which goes on for a bit) is
that a type is only private if it has the private attribute in the
module where it is originally defined. If you import (va USE) a type
into some other module and declare it private there, that doesn't
actually make the type private - that just means that the second module
doesn't "export" it. The language keyword PRIVATE is unfortunately
misleading in that it doesn't mean private. In the words of the
standard (or close to them - I didn't go find and copy the exact ones,
but I recall them pretty well from the long debate), the private
attribute means that the entity "is not a public entity of this
module". Note the peculiar negative form. Why does it talk about not
being public instead of about being private? That's because it might
still be public from some other module. Indeed, it must have been if
you managed to get it via USE in the first place. Only if it is
declared private in the original module is it really private.
P.S. Most of this nitpicking is made irrelevant in f2003. In fact, I
had to go check to make sure it was f2003 instead of f95. Alas, it
isn't until f2003, so one still has to deal with it in f95. The whole
constraint in question is "silly". It achieves nothing useful,
invalidates perfectly sensible code (even after you interpret it
correctly), and is based on a fundamental misconception of what
accessibility is about. F2003 removes the silly restriction (and a few
related ones).
--
Richard Maine | Good judgment comes from experience;
Richard.Maine@nasa.gov | experience comes from bad judgment.
| -- Mark Twain