Information Technology Reference
In-Depth Information
i.e. formal non-termination is not recursively enumerable. In other words: If we
would try to decide e.g. formal termination using the techniques of abstract inter-
pretation [CoC77], then for full Algol with nested procedures and global formal
variables we are not able to define an appropriate abstract domain, whereas for
unnested (flat) C-like programs we are.
We do not say that we consider the mentioned properties of Algol60-programs
and of their simulating Java-programs (which form a sublanguage of Java) only
as unpleasant. The properties demonstrate a surprisingly high computational
power of Algol60. Steering (controlling) of Algol60-computations can be done
both by (general recursive) arithmetics, but also by equivalently powerful pro-
cedure parameter transmissions [Lan73a]. The specific field of application de-
cides which (mixture) of both techniques is yielding most ecient and adequate
programs.
To the best knowledge of the author, before [Goe05]'s structural simulation
there seems to be no work which shows: It is possible to write Java-programs
which generate non-regular, general recursive execution paths and trees without
employment of any arithmetics, just by class instantiations, method invocations
and parameter transmissions.
We should remind the reader that Algol60's structural power is due to the
so called static scoping or binding of identifiers which is subjected to the fol-
lowing defining phrases inside section “4.7.3. Semantics” of the Algol60-report
[Nau60, Nau63]:
“4.7.3.2. Name replacement (call by name).
Possible conflicts between iden-
tifiers inserted through this process and other identifiers already present within
the procedure body will be avoided by suitable systematic changes of the formal
or local identifiers involved.”
4.7.3.3. Body replacement and execution.
···
If the procedure is called from a
place outside the scope of any non-local quantity of the procedure body [a so
called global parameter] the conflicts between the identifiers inserted through this
process of body replacement [copying] and the identifiers whose declarations are
valid at the place of the procedure statement [procedure call] or function designa-
tor [function procedure call] will be avoided through suitable systematic changes
of the latter identifiers.”
Note that the meaning of a procedure call is defined by a copy of the cor-
responding procedure body. The above phrases explain how to avoid so called
local binding errors when actual parameters (arguments), i.e. identifiers or ex-
pressions, are substituting applied occurrences of corresponding formal parame-
ters and how to avoid so called global binding errors when a modified procedure
body substitutes a procedure call.
In the past several programming language researchers have overlooked these
two phrases or have (unwillingly) misunderstood them. Maybe the researchers
have thought that just one initial renaming is sucient so that no further re-
namings are necessary during runs of computations. Before Algol60 came up
continued renamings were known in λ -calculus derivations ( α -and β -reductions).
···
Search WWH ::




Custom Search