From owner-sc22wg5  Wed Jul 17 19:04:36 2002
Received: from nameserv.rl.ac.uk (nameserv.rl.ac.uk [130.246.135.129])
	by dkuug.dk (8.9.2/8.9.2) with ESMTP id TAA54253
	for <SC22WG5@dkuug.dk>; Wed, 17 Jul 2002 19:04:36 +0200 (CEST)
	(envelope-from jkr@jkr.cc.rl.ac.uk)
Received: from jkr.cc.rl.ac.uk (jkr.cc.rl.ac.uk [130.246.8.20])
	by nameserv.rl.ac.uk (8.8.8/8.8.8) with ESMTP id SAA01852
	for <SC22WG5@dkuug.dk>; Wed, 17 Jul 2002 18:05:05 +0100
Received: (from jkr@localhost)
	by jkr.cc.rl.ac.uk (8.8.8+Sun/8.8.8) id SAA01815
	for SC22WG5@dkuug.dk; Wed, 17 Jul 2002 18:08:40 +0100 (BST)
Date: Wed, 17 Jul 2002 18:08:40 +0100 (BST)
From: John Reid <jkr@rl.ac.uk>
Message-Id: <200207171708.SAA01815@jkr.cc.rl.ac.uk>
To: SC22WG5@dkuug.dk
Subject: Re: Edits to the draft standard
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"


Here is a revised version of the paper I sent yesterday. Please
discard yesterday's version. Some of my edits represent small 
technical changes to the standard. Next time round, I will separate
them off into another paper.

Comments on what is here, please.

John. 


.............................



                                                              02-xxy
To: J3
From: John Reid
Subject: Major edits
Date: 17 July 2002

I would like to acknowledge the help of Malcolm Cohen, Richard Maine,
and Rob James with the construction of some of these edits.

42:7. Change 'extensible type' to 'extensible type that has no type
parameters'.  
[This brings the constraint into line with the text in 4.6, which
says that an alias is not a new type. If we were to allow extension
of an alias to a type with parameters, we would be treating it as
a new type that has lost its type parameters and there is no text 
that explains this.]
 
43:10. After 'shall' add 'either be an initialization expression or be a
specification expression that does'.
[The wording in Corrigendum 1 to F95 allows for an initialization
expression here. I believe that the present wording will lead to an
inconsistency with f95. See also C550 on p. 79.]

43:14. Change 'colon or' to 'colon, be an initialization expression, or'.  
[See previous edit.]

43:31 to 44:3. Replace C438 and C439 by

C438 (R436) If PASS appears, the procedure component shall have an explicit
     interface specified by <proc-interface>. A dummy argument of the
     interface shall meet the requirements for a passed-object dummy
     argument (4.5.1.6). It shall be named <arg-name> if <arg-name>
     appears; otherwise, it shall be the first dummy argument.  It
     shall be polymorphic if and only if type type-name is extensible.
     All of its nonkind type parameters shall be assumed.
[I think it is clearer not to repeat things that are the same. I think
it needs to be said that the interface is specified by
<proc-interface>.  Finally, I found it hard to interpret C441 until I
realized it was all part of this, so I have included it here,]

44:5. Delete. [Included in new C438.]

44:25&27. Replace '<abstract-interface-name>' by 
'<abstract-interface-name-list>.
[There are usually many specific procedures associated with a single
generic. The present syntax is not wrong because you can write many
GENERIC statements, one for each specific. However, this is 
unnecessarily clumsy. I at first thought that this constraint was
in error because it specifies only one specific.]

45:11-19. Replace C455, C456 by

C455 (R440) If PASS appears, a dummy argument of each interface
     specified by <abstract-interface-name> or <binding> shall meet the
     requirements for a passed-object dummy argument (4.5.1.6). It
     shall be named <arg-name> if <arg-name> appears; otherwise, it
     shall be the first dummy argument.  It shall be polymorphic if and
     only if type type-name is extensible.  All of its nonkind type
     parameters shall be assumed.
[I think it is clearer not to repeat things that are the same. The bit
about the interface being explicit is a distraction since it is always
the case for bindings and is covered by other constraints.  Finally, I
found it hard to interpret C462 until I realized it was all part of
this, so I have included it here,]

45:31. Delete. [Included in new C455.]

47:19-22. Delete paragraph. 
[It is wrong, since the first and second sentences are inconsistent for
sub-sub-components. It is also incomplete.  Why try this, given that
the concept has already been defined in the previous paragraph?]

50:4-5. Replace by

   The interface of a specific binding specified with <null-init> is
   that of <abstract-interface-name> if present or that of the parent
   type otherwise.  The interface of a specific binding specified with
   <procedure-name> is that of the procedure.

   The interface of a generic binding contains the interfaces of all
   the procedures in its <abstract-interface-name-list>s and
   <binding-list>s and all those of the parent type that have the same
   <generic-spec> and are not overridden.

51:4. After 'specific procedure' add 'that overrides (4.5.3.2) the
inherited binding'.
51:5. Delete '(4.5.3.2)'.
[We need to make it clear that the rules of overriding apply when the
inherited binding is deferred.]

51:14-17. Delete sentence. 
[I do not think implicit PASS is consistent with the bnf. See for
example C458/9 on p. 45. I think both the standard and the user's
program will be clearer if PASS is specified whenever it is wanted.]

57:1-3. Change to
  In a generic binding, each specific interface that has the same name
  in the parent binding shall satisfy the rules for overriding a
  specific binding.  If there are others, they extend the generic
  interface and shall satisfy the requirements specified in 16.2.3.

60:4. Change 'target' to '<data-target> or <proc-target>' and delete
the internal note. [Reasons are in the internal note.]

81:28. Start a new paragraph after 'pointer.' and change the sentence 
that follows to 'If a name that has the EXTERNAL attribute is the name 
of a dummy argument, it is a dummy procedure.' [This change is also 
needed for the sake of the sentence that follows.]

81:39. Delete. [This is very ambiguous. What does 'above' mean (how far 
up should I go)? What does 'it' refer to?]

164:11+. Replace the note by
   C810a (R822) The form <associate-name = selector> shall be used if
   <selector> is not a named variable.
[The text on page 165 does not work if there is no <associate-name> and
<selector> is not named. Also, I took a long time (unsuccessfully)
trying to understand exactly what the note meant.]

203:10-11. I do not understand '(or some portion thereof)'. The
circumstances when only a portion of the value is used need to be
explained. 

266:15-18. Delete sentence. [Looks like an early draft of the previous
sentence.]

411:34. Change 'name' to 'designator'. 
[We need to cover variables that are subobjects.]

