June 2, 2001 
 

J4/01-0376

 
SUBJECT: 

 
Page 1 of 17

Comments on SC/22 N3204 (FCD 1989 ) 
19 April 2001 (created and sent by Tim Josling to SAI)

DATE: 
 

02 June 2001 (distributed by Bill Klein)
William M. Klein (wmklein at ix

.
netcom
.
com) (based on document created by
AUTHOR: 
 
Tim Josling)
(From Bill Klein)

The “following” document was created by Tim Josling (of Australia) and submitted to the Australian
National Standards body in April 2001.  He was not aware (and they did not tell him) that this body is

neither a “P” or “O” member of SC22 (although they are a member of ISO).  Therefore, it was only
after the international ballot results became available that it became clear to him (and me) that these
comments would not make it to the appropriate committees for “comment resolution” on the FCD.

I am not (currently) submitting this as “late” US Public Review comments, as I see little purpose in
that.  I am, however, sending them to J4 (as a J4 document) for whatever action J4 (and/or WG4)

feels is most appropriate.  It seems to me that there are certainly some of these comments that could
be handled in the “totally editorial” project work and others that might be fixed in the (slightly more
technical) Project Editor paper that has already been identified in the US FCD comment document.  
Other comments may be appropriate for the “candidate for a future revision” list.

I hope, that if resources allow, the appropriate standards groups will consider (and act upon) as many
of these comments as possible.  Should J4 (or WG4)  wish me to submit them as “late US  Public
Review  comments,”  I  would  be  happy  to.    Otherwise,  this  document  should  provide  whatever

“tracking” is appropriate at this (too late) stage of FCD processing.
(The remainder of this document was created by Tim Josling)
Introduction:

My Name is Tim Josling. I am developing a free COBOL compiler as part of a world wide team. My
comments are written from that perspective. I am basing my comments on the assumption that the

standards body would wish to encourage implementations of the standard.
My email address is tej
at
melbpc
.
org
.
au.
Comment

Clause/
Subclause

Paragraph
Type of comment
COMMENTS
Proposed change
Number
Figure/

(General/
Technical/Editorial)

Table
1
First
General

Copyright
notice

The copyright notice would
appear to prevent copying

Add amendment to permit
copying for purpose of

the draft in order to review
it.

review.

June 2, 2001 
 

J4/01-0376
 
 
Page 2 of 17
2
Copyright notice
First
General

This is far more restrictive
than the notice in COBOL

Allow reasonable use of
excerpts from the standard

85. It will make it extremely
difficult for us to provide

in the documentation for
COBOL compilers.

adequate documentation
as any description of
COBOL is almost by

definition based on the
standard, and therefore
potentially in breach of

copyright.
Patents. The existence of

3
Foreword
Last
General

The committee has issued
a call for patents and
should consider amending

patents on parts of the
language, and which

cannot be worked around,
may preclude the
development of a complete

to standard if necessary, to
allow full implementations
that are not in breach of

free COBOL compiler. A
free compiler cannot
included patented

patents.

algorithms
Not clear at all which

4
Acknowledgement
All
General

The standard should make
clear which material is
allowed to be used in

material within the
standard is covered by this

concession.
It is not specified how to

COBOL manuals.
Clarify what is meant by

2nd
5
3.1.1
Editorial

distinguish syntax rules
from other rules. Some

‘syntax rules’. Presumably
any rule under a heading

rules are under headings
for syntax rules and others

‘syntax rule’. However in at
least one case, this

under headings for general
rules, but others are under
neither. How exactly do

situation can only be
distinguished at run time.
See comment 138.

you distinguish syntax
rules from other rules.

6
3.1.8
1)
Editorial

Term ‘language element’ is
not defined.

Add a definition. In general
every technical term used

should be in the list of
definitions which should
have cross references to

the detailed description.
Add requirement that

5th
7
3.1.8
General

The implication of the fact
that implementors are not

vendors provide a
mechanism to turn off non

required to provide a way
to turn off non-standard
keywords means that it is

standard keywords. This is
far less onerous that the

impossible to write a
program which is
guaranteed to compile

other requirement to flag
use of other extensions.

under a standards
conforming compiler. This
should be changed

June 2, 2001 
 

J4/01-0376
 
 
Page 3 of 17
1st
8
3.1.13
General

Vendors are not required to
document limits. No

Require vendors to
document any limits other

minimum program size or
complexity has to be

than ‘total available
memory’. Suggest that

supported. This again
makes it impossible to
write a program that will be

vendors are urged to
refrain from imposing such
limits.

sure to work on a
conforming compiler.

Specify minima for at least
levels of nested statements
(10)

number of forward
references (100)
number of sub clauses in

any statement (10)
number of levels of nested
data definitions (10)

Other items as per
comments below should
have minimum limits of

1,10,100 rather than
various odd values.
- etc

9
4
All
Editorial

No cross references to
detail about defined items

Add cross references eg
See Section 4.1.1 on page

77.
Add definition and cross

1st
10
4.6
Editorial

Space character not
defined and not mentioned

reference

in the index
Group Item not defined and

1st
11
4.11
Editorial

Add definition and cross
reference.

not mentioned in index
"examaple" (sic)

2nd
12
4.27
Editorial

Correct the spelling
Clarify paragraph.

2nd
13
4.27
Editorial

What does this paragraph
mean and what is it there
for.

14
4, also 8.4.2
All
Editorial

Term ‘identifier’ is widely
used but not in the list of

Add definition and cross
reference. Change the

definitions. It is also
misleading and its use has

term to ‘data access
expression’ or some other

been extended far beyond
the intuitive meaning of
identifier.

appropriate term.
1st
15
4.97
Editorial

This definition seems to be
circular.

Clarify
1st
16
4.116
Editorial

The technical term
‘rightmost element’ is used

Substitute another term or
claarify.

but what does it mean eg
in a little endian vs big
endian world.

1st
17
4.170
Editorial
Ambiguous

After ‘last’ add ‘and only
the last’.

18
4
All
Editorial

Term ‘Separator space’ not
defined though widely used

Add definition and cross
reference.

June 2, 2001 
 

J4/01-0376
 
 
Page 4 of 17
1st
19
4.176
Editorial

Term ‘statement’ has no
definition though it is widely

Add definition and cross
reference.

used.
I believe many other terms

20
4
All
Editorial

Scan document looking for
undefined terms and add

are also widely used but
not defined.

definitions.
Remove assumption that

2nd
21
5.1
Technical

Requirement for parts of a
construct to be in order is

items have to be in order,
where possible eg clauses

excessive. For example
why does ‘redefines’ have
to be first.

of data item, at end/not at
end etc.

1st
22
5.1.4
Technical

There is no reason why
level numbers must be 1 or

Change rule to state that
level numbers must be

2 digits. It is yet another
rule that adds no value and

unsigned integers in the
specified ranges.

makes the language more
complex. It also makes
compilers slower due to the

requirement to issue
warnings.

23
6
3a)
Technical

Another rule which adds no
value but adds yet another

Change rule to state that
the compiler shall accept

magic number the
programmer needs to be
aware of, and the compiler

lines of length up to at least
100, shall document any
restriction, and need not

writer needs to check for.
This also makes
generating code by

warn about longer lines.

machine more complex.
Why are there three literal

24
6.1.2
"- ‘-
Technical

Remove literal continuation
except for fixed format

concatenation mechanisms
(& and "- and old style)?

legacy continuation. Allow
literal concatenation in any
context but only for non-

This creates a lot of
complexity and corner

cases.
Term ‘ljne’ is undefined.
Why the insistence that the

numeric literals.
Add definition
Allow R-margin to be end

25
6.1.2.1
7)
Editorial
26
6.2
Margin R
Technical

R margin must be fixed.
The ’85 standard is not

of line (require vendor
documentation of this).

quite so specific. Why
could the right margin not
be ‘end of line’ which is

usually more natural
Any character would seem

1st
27
6.2.1
Technical

Qualify 6 3)b) to allow the
vendor to specify whether

to include end of line
character, which seems to

control characters are
allowed in the sequence
area

preclude text format
compiler input files.

28
6.2.4
1)
Editorial

Term ‘blank line’ is not
defined.

Add definition. Specify how
much of the line is blank.

Are comments allowed etc.

June 2, 2001 
 

J4/01-0376
 
 
Page 5 of 17
29
6.2.4
All
Editorial

This section is very
complex and hard to

Do not allow continuation
of lines in free format and

understand.

only allow COBOL 85
continuation in fixed lines.

Then people will be able to
understand it.

10th
30
6.2.4
Editorial

Term ‘invocation operator’
is not defined

Add definition
2nd
31
6.2.4
Technical

Seems to imply by use of
‘a’ that a literal can only be
continued once.

Change ‘a …line’ to ‘one or
more …lines’

2nd
32
6.3.1
Technical

I do not understand why
the rule that a continuation

Remove last sentence of
this paragraph ("at least

has to contain at least one
character of the literal

one …").

exists. It may not make
much sense to do so, but
why have this rule? It is

another pointless thing for
the compiler to check.

33
6.4
6)
Editorial

Term ‘Source Indicator’ is
not in list of definitions

Add definition and cross
reference.

34
7
Last
Editorial

The information about
when debugging lines are
processed should be

Add details and/or cross
reference

included also in the
sections on debugging
lines

35
7.1.2.2
9)
Technical

Not clear what the
matching rule is for

Clarify.

continued literals. Do they
both have to have the

same continuation
structure, or do they both
have to have the same

value after pasting the
continuations.

36
7.1.2.2
12)
Technical

Arbitrary limit of 322 should
be removed. Yet another

Remove limit.

magic number to
remember and enforce.

37
7.1.2.3
11)
Technical

This is not a necessary
restriction and creates

Remove restriction and
specify how the processing

significant difficulties for
the programmer.

works using an extension
of the excellent ‘stages’

concept used in s7.
Replace by ‘REPLACE

38
7.1.3.3
7a)
Technical

Keyword ‘ALSO’ is
misleading and it is actually
‘instead of’ and pushes the

….SAVE’

existing replace on to a
stack.

June 2, 2001 
 

J4/01-0376
 
 
Page 6 of 17
39
7.2.2.3
3) and 4)
Technical

Why is there a distinction
as to when free form

Allow free form comments
after compiler directives in

comments can follow a
compiler directive. Yet

all cases.

another rule to enforce for
no obvious reason eg for
each line one must

remember that it was free
for fixed format in order to
enforce the rules.

40
7.2.2
8)
Technical

This seems to presuppose
a certain sequence of

This should be reworded in
terms of a conceptual

processing conceptually at
least but it is not clear at all

sequence of operations (eg
continued literals are lasted

what the sequence is. It is
just a set of arbitrary rules
which seem to make little

together, then compiler
directives are processed or
whatever). This was done

sense as they stand.

very successfully eg in the
C language. Without it, it is
very difficult to understand

what is intended.
This will be quite difficult to

41
7.2.5.1
1d)
Technical

This requirement of
checking for division by
zero would seem to be a

check syntactically. Clarify
what is the requirement of

syntax rule that the
compiler must check for.

the compiler.
42
7.2.7.1
1c)
Editorial

Term ‘defined condition’ is
not in the definitions list.

Add definition and cross
reference

1st
43
7.2.8
Technical

Why can’t you specify a
calling convention for
function names?

Allow specification of
calling convention for
function-names as well.

This seems to be implied
by 7.2.8.2 (3) which refers
to functions/

44
7.2.13.2
3)
Technical

This rule seems to be a
consequence of some
conceptual sequence of

It would be better is the
conceptual sequence of
operations were made

operations.

explicit and these rules
would them follow simply
from the sequence.

45
7.2.14.3
2)
Editorial

‘or implied’ – how can ON
be implied as it is not the

Remove ‘or implied’.

default?
‘test’

46
7.2.18.2
3)
Editorial
Change to ‘text’

June 2, 2001 
 

J4/01-0376
 
 
Page 7 of 17
1st
47
7.2.18
Technical

Programmer has to put a
directive in the source to

Allow compiler writer to
specify default format

turn on free format.

externally. Otherwise
programmers will be

doomed to put >>SOURCE
FORMAT FREE in
programs forever. This is

just an extension of the fact
that COPY programs take
the default mode from

COPY verb.
Change to ‘at runtime or

2nd
48
8.1.1
Technical

‘at runtime’ is too
prescriptive. Should allow
translation before runtime.

before’
2nd
49
8.1.1
Technical

What constraints can the
implementor put on the
class literal?

Clarify. Add to list of
implementor defined
elements

1st
50
8.3.1.1
Technical

Fixed word size limit of 31
is yet another magic

Replace with statement
that implementor must

number to remember and
for the implementor to

allow words of at least 31
characters but is

enforce.

encouraged not to impose
any specific limitation, and
must document any such

limitation.
Add definition and cross

51
8.3.1.1.1
3)
Editorial

Term ‘constant name’ not
in list of definitions

reference.
Allow function pointers

52
8.3.1.1.1

5) (second
group)

Technical

Function pointers not
allowed

(which would have to have
a prototype associated with
them is they are to be used

to invoke functions. This is
needed eg to interface to C
programs such as qsort,

which require function
pointers to be passed

3rd
53
8.3.1.1.2
Technical

Names including library
names must be disjoint.

Add to last paragraph,
except for library-names.

However there is no need
and it could be quite
disruptive to force library

names not to clash with
other names.

1st
54
8.3.1.1.5
Editorial

‘are’
Limit of 160 is yet another

Should be ‘is’
Remove limitation. This

55
8.3.1.2.1.2
1)
Technical

(different) magic number.
Limitation should be
removed. (Also in

should be covered under
the general maxim ‘no hard
coded limits if possible’, if

8.3.1.2.3.2, 8.3.1.2.4.2)

not, document them. Have
a minimum of 100 bytes
which vendors must

support.

June 2, 2001 
 

J4/01-0376
 
 
Page 8 of 17
56
Table of contents
Editorial

Table of contents in the pdf
version of the document is

Fix

missing several chapters.
Not clear from this

57
8.3.1.2.1.3
N/a
Editorial

Add mention of this fact. It
is stated somewhere else

description that case is
significant in alphanumeric

but should be here also.

literals though it is not
significant elsewhere.

58
8.3.2
1)
Editorial

Last sentence appears to
have no effect but
presumably is intended to

Make the sentence less
enigmatic.

have some effect
The requirements for

59
8.3.2
All
Technical
Remove the rule.

spaces (eg period comma
and semicolon must be

followed by space, == must
be preceded or followed by
space) are often

unnecessary and add
complexity for programmer
and implementor alike.

60
8.4.1.1.2
5)
Technical

Why allow duplicate names
as long as they are not

Require warning in case of
duplicate names. Same for

referenced? This increases
the complexity of

data names and 88 levels.

implementation and
encourages bad
programming practices and

increases the risk that
spelling mistakes will
cause incorrect programs

to be run.
Yet another different magic

61

13.16.36.1 (9),
8.4.1.2.2(3)

See previous
column

Technical

Encourage implementors
to have no arbitrary limit

number (7 levels of occurs
is required).

Require at least 10 levels –
see (8) above; this limits
the number of magic

numbers to 2 easily
remembered numbers– 10
and 100.

62
8.4.2.2.1
12a)
Editorial

This rule should not be
here but should be covered

Remove this paragraph.

by the general rule for
subscripting.

63
8.4.2.7.2
2)
Technical

‘is not a universal object
reference’.

Another apparent technical
term which is not in the list

of definitions. Add
definition.

64
8.4.2.11.2
3a)
Editorial

This rule should not be
here but should be covered
by the general rule for

Remove this paragraph.
subscripting.

June 2, 2001 
 

J4/01-0376
 
 
Page 9 of 17
65
8.4.2.12
All
Technical

For no obvious reason,
function pointers are not

Add function pointers to
allowed data types.

allowed. See comment 52.
Rules seem to exclude

program pointers from
pointing at functions or
being used to invoke them.

66
8.4.5.1
All
Editorial

Local Names. Technical
term is undefined

Add definition
67
8.4.5.1
All
Editorial

Global names. Technical
term is in list of definitions

Change definition so it is a
definition not a description

but the definition only
repeats paragraph 2 here
which only states one

of one attribute.

property of global names
and does not define them.

68
8.4.5.1.(1,2,3,4)
All
Editorial

Repetition of the same rule
for each type wastes

Consolidate the rule so that
it is only stated once (ie for

everyone’s time.

names of type X, Y, Z they
are global if they contain
the globa;l clause).

69
4
All
Editorial

Term ‘phrase’ is not
defined

Add definition.
1st
70
8.4.5.6
Editorial

It is difficult to determine
the precise intended role of

Add a description of the
external repository in

the external repository,
even in the presence of
s8.13.

section C.
5th
71
8.6.4
Editorial

‘Lifecycle’ technical term is
not defined.

Add definition
72
8.8.1.1
Table 4
Technical

Rule that you cannot have
successive unary
negatives seems to be

Remove rule (ie allow
successive negatives (eg a
-

- b).

there for no reason, makes
the language more
complex and is yet another

thing the implementer has
to check

73
8.8.1.1
7)
Editorial

Term ‘composite’ is used
but not in list of definitions.

Add definition and cross
reference

74
8.8.1.3.1.1
All
Technical

31/32 digits of precision
seems very arbitrary, and
will execute very slowly on

I do not have a solution to
this problem. Possibly
allow vendors to provide a

all known hardware.

facility to allow users to
specify a specific lower
level or precision such as

18 digits.
Remove

75
8.8.1.3.6
1(1)
Editorial

Existence of this blank
paragraph is a typo.

1st
76
8.8.3.1
Technical

Not clear where these
expressions are allowed.

Allow concatenation
expression anywhere an

appropriate literal is
allowed.

June 2, 2001 
 

J4/01-0376
 
 
Page 10 of 17
77
8.8.3.2
2)
Technical

Arbitrary limit of 160. Yet
another magic number.

Remove limit. Require
vendors to support

concatenated literals of at
least 100, while

encouraging ‘no fixed limit’.
Add ‘except in the context

78
8.8.4.1.3.3
4)
Technical
Contradicts (1) and (2)

of (1) or (2)…’
Clarify.

79
8.8.4.3
2)
Technical

It is not quite clear what
‘necessary’ means here.

Presumably what is meant
here is that in specific

circumstances parts of a
logical expression are not
evaluated. I think I know

what this means but that is
not really quite what is
needed. There are in fact

various levels of
sophistication in analysing
logical expressions that

allow differing degrees of
omission of evaluations.

Eg

If (complicated-expression-
1) OR not (complicated-

expression-1) XXX.

Because we are evaluating
OR expression and its

inverse, the end result
must be true. Therefore in

a sense nothing needs to
be evaluated (leaving
aside the issue of zero

length data items for the
sake of simplicity).

2nd last
80
8.13
Technical

It is dangerous to allow
users to suppress warnings

Do not require provision of
a mechanism to turn

about differences between
the repository and the

warnings off.

source code.
This seems to require

1st
81
9.1.6
Technical

Clarify that these attributes
‘may’ be fixed for the life of
the file.

implementers to enforce
the fact that certain

attributes of files cannot
change while the file exists.
Why enforce this?

82
12.2.4.2
1)
Technical

Allowing specification of
source-computer without
any details adds

Remove this paragraph.

complexity for no obvious
reason.

June 2, 2001 
 

J4/01-0376
 
 
Page 11 of 17
83
12.2.6.2
12)
Editorial

‘Thru and through are
equivalent’ This is repeated

Replace by a rule added to
section 8.9 or some other

many times throughout the
document, and is always

suitable place..

the case.
Allowing omission of

84
12.2.7.1

Format 2
(intrinsic)

Technical
Remove format 2.

FUNCTION for intrinsic
functions, based on a

directive earlier in the
source file means changing
the language’s syntax. To

me this is a bad idea, and
only seems to be justified
on the basis of making

code more concise – which
is not an apparent design
objective of the standard!

85
12.2.7.3
12)
Technical

Ability to ‘shadow’ intrinsic
function names makes
programs harder to

Remove ability to shadow
intrinsic function names
with user defined functions.

understand. Every time you
see a reference to an
intrinsic function you would
need to check if it is

shadowed.
Limit on number of locks

86
12.3.4.8.3
7)
Technical

Having a limit of one in
meaningless. It would be

shall be at least one.

better just to make this a
software dependent
feature.

1st
87
13.6
Technical

Omits to mention linkage
can contain based items.

Add mention of this fact
88
13.14.2
22c)
Technical

There is no obvious reason
for this rule; it is another

Remove rule.

irregularity.
The layout of the bits in the

89
13.16.1
All
Technical

Specify layout within a byte
or specify that it is
implementor defined.

bytes is not specified. Is
this an omission or a

deliberate intention to
make this implementor
defined?

90
13.16.5
All
Technical

It appears based items can
be in working storage,

Allow based storage only in
working storage.

linkage, or local storage.
This is very confusing as

linkage and local storage
conceptually are for
parameters and data items

allocate on program entry
respectively, which
conflicts with the based

concept.

June 2, 2001 
 

J4/01-0376
 
 
Page 12 of 17
91
13.16.5
All
Technical

It would have been a good
ideas to allow upward

Allow set address on any
item in linkage, without

compatibility with the
existing code which allows

BASED clause. Consider
removing BASED clause

SET ADDRESS of any
linkage item, without a
based clause.

entirely. Clarify that linkage
can be for parameters or
for items whose address is

set with SET ADDRESS.
Make screen optional.

92
13.16.9
All
General

Making character based
screens a mandatory part
of the language is 15 years

too late. In any case,
because it is
hardware/software

dependent, the
implementor has a
loophole allowing him to

avoid implementing it.
First sentence is a

1st
93
13.16.20
Editorial

Replace with a sentence
that has some meaning eg

pointless tautology.

replace last word with
"externally visible’.

94
13.16.20.2
4)
Technical

There is no reason why
pointer data items cannot

Remove constraint

be external
‘name of the file’ suggests

95
13.16.20.3
3)
Technical

Specify it is the name of
the reference to the file that
is visible to other

it is the actual external file
in the OS.

programs.
Remove restriction.

96
13.16.21.2
1)
Technical

Restriction to unsigned
data item is not needed.

Covered by general
requirement that the data
item be in range.

97
13.16.22
All
Editorial

Enigmatic if you have not
read Appendix C.

Provide cross reference to
discussion in Appendix C.

Same in 13.16.17
Write the material on

98
13.16.22.3
2c3)
Editorial

This seems to be repeated
from elsewhere.

implicit PICs in one place
and provide cross

references. Otherwise one
has to reread the whole

thing in case there might
be some slight changes.

99
13.16.22.3
2c3e)
Technical

It is not specified how the
usage varies depending on

Clarify that the first one
that can hold the value is

the magnitude.

the one used, even if the
precision is less than the

precision of the value,
Require a warning on lost
precision.

June 2, 2001 
 

J4/01-0376
 
 
Page 13 of 17
100
13.16.25
All
Technical

Unclear which of the
possibly many copies of a

Clairfy, or preferably forbit
use of IS GLOBAL for

local storage item in an
enclosing program would

items in local storage.

be accessed (top one, last
one allocated?). It is also
technically difficult and

slow to find such items on
the stack, and may be
unreliable as well in a multi

language environment.
Enigmatic without having

101
13.16.29
All
Editorial

Provide cross reference to
relevant section in
Appendix C.

read Appendix C.
102
13.16.35
All
General

Report is mandatory
facility, but is far from state
of the art (no fonts, images

Make report writer facility
optional.

etc) and often not used.
Unnecessary limitations.

103
13.16.36.2
(1)
Technical

Remove limitations.
Specify that where
subordinate tables are less

than maximum size, space
is still there (ie later items
do not slide up).

104
13.16.36.2
16)
Technical

Why is this an integer
whereas other similar data

No change required here.

items have to be
unsigned?

105
13.16.36.3
2)
Technical

Requiring support for
2*max means that the most
efficient form for index

Replace requirement by
requirement to support up
to max+1 only.

(address) is not possible in
most cases.

106
13.16.38.2
4)
Technical

PIC size limit is 50.
Another magic number

Remove this paragraph.

which is not needed.
Object orientation is a

107
13.16.40
All
General

Make optional. However
only implementations that
implement it should be

mandatory feature. This is
too large a jump for a

language and comes at too
high a runtime an