From: James Giles on
CRITICAL and BLOCK

I won't be commenting on most of the CO-ARRAY features
because I don't quite yet fully understand them. But in
most of the different kinds of parallel computing I've done
in the past the need for critical sections arises.

Instead of a CRITICAL construct, I think that CRITICAL
should be a keyword like PURE or RECURSIVE (and such) that
applied to procedure declarations. Similarly, it should
be an optional keyword on the new BLOCK construct:

block-stmt is [ block-construct-name : ] [ CRITICAL ] BLOCK

The reason is that when I've needed critical sections the
shared data being manipulated is often something that should
be imported (USE) for that particular section alone and not
visible elsewhere. There are also often additional local
variables needed only temporarily for manipulating the
shared data. So it's often the case that critical sections
coincide with the need for declarations. Rather than add
the ability to declare within CRITICAL constructs, it makes
sense to combine the feature with existing constructs that
already can declare things.

As an aside, except for this possible merging with CRITICAL,
the only real value I see for the BLOCK construct is if some
form of control of host association is forthcoming.

--
J. Giles

"I conclude that there are two ways of constructing a software
design: One way is to make it so simple that there are obviously
no deficiencies and the other way is to make it so complicated
that there are no obvious deficiencies." -- C. A. R. Hoare

"Simplicity is prerequisite for reliability" -- E. W. Dijkstra