(j3.2006) defining a type with no components

Malcolm Cohen malcolm
Thu Apr 17 20:31:08 EDT 2014


On Apr 16, 2014, at 17:34 , Malcolm Cohen <malcolm at NAG-J.CO.JP> wrote:
> Try [452:34].  This answers all the definition questions.
>
>Which reads ?A derived-type scalar object is defined if and only if
>all its nonpointer components are defined.?
>
>So since foo has no nonpointer components, they?re all defined.

Dan Nagle writes:
>It seems just as logical to say they?re all not defined,
>or all green, or all not green.
>
>Is there a more clear statement I missed?

You literally ***CAN NOT*** get more clear than an "if and only if" definition.

...
>If this were merely a case of ?one must read the whole section to understand?

You only need to read the definition quoted above, which categorically states 
the definition status of a derived-type scalar object.  The are no "ifs buts or 
maybes" in that definition.

Bill Long writes:
>For me, the confusion is that we have a specific subclause, 16.6.2 ?Variables 
>that are always defined? which lists zero-size arrays and strings, but NOT 
>variables of an empty type.

Fair enough, but that subclause does NOT state that there are not other 
variables that are always defined.  In fact we know for a fact that there are 
other variables that are always defined: for example,
   REAL :: x = 3
when the program contains no assignments etc. to X.

16.6.2 is dangerously incomplete!  You cannot draw ANY inference from what it 
does not say.

>If variables of an empty type are, in fact, always defined, it would be a 
>helpful clarification to actually say so in 16.6.2.

It could equally well be contended that 16.6.2 is pointless misleading waffle 
and should be deleted with extreme prejudice.

I find it somewhat boggling that anyone can read a sentence that is not there 
and therefore ignore the categorical statements that *ARE* there!

It would be better to replace the whole of 16.6.2 with a NOTE saying
  "A consequence of the above rules is that a zero-sized array or a zero-length 
character string will always be defined.  Similarly, a derived-type object which 
has no nonpointer components will always be defined."

But adding any complicated case to 16.6.2 which will invariably be incomplete 
would be very likely to increase the risk of a misunderstanding, not decrease 
it.

>See 14-144

Not much of an improvement - it still misses out plenty of cases I can think of. 
Really, if we are going to change 16.6.2 at all it needs to be a note.  And some 
wording improvements elsewhere in 16.6 would be in order.

The fact is that 16.6.2 is simply a consequence of other rules, i.e. it is 
completely duplicative text.  We all know what happens with duplicative text - 
if you are extremely lucky only one of the copies will be wrong.  The more I 
look at this case the more I think that 16.6.2 is harmful duplication.

> Is the simple act of including a declaration sufficient to cause
> the result to ?be defined by the function??

No, but executing the function is.  Just like
   CHARACTER(0) FUNCTION f()
   END
and
  FUNCTION g()
    REAL g(0)
  END

Yes the function return result requirements could be better worded (it's already 
been noted that the wording is not quite right viz its use of "value" - if we 
are going to fix that I do not think I would be in favour of fixing it 
wrongly!).  Anyway, I don't see any serious problem here though, as executing 
the function WILL cause the result variable in ALL of these cases to become 
defined (it is not defined beforehand because it does not even exist).

Oh and similarly the "events that cause" subclauses are chock-full of unstated 
"actually this does not apply to a zero-sized array" etc.  I'm not terribly 
sympathetic.  People trying to rules-lawyer based on what is not said in 16.6 
are on a hiding to nothing (even rules-lawyering based on what *is* said in the 
"events" clause is pretty edgy).  It is very very easy to leap into 16.6 with 
some edit that on the appears to make sense and fixes some things, but actually 
breaks other things as well - i.e. not progress.

I am sure we can make some progress to make this a bit easier to read, but 
largely 16.6 however badly worded is not leading to significant implementation 
difficulties, so let's not get too concerned about its flaws.  Which have been 
there like forever man.

Cheers,
-- 
................................Malcolm Cohen, Nihon NAG, Tokyo. 




More information about the J3 mailing list