36 lines
2.3 KiB
Plaintext
36 lines
2.3 KiB
Plaintext
COME FROM
|
|
|
|
n. A semi-mythical language construct dual to the go to ; COME FROM label
|
|
would cause the referenced label to act as a sort of trapdoor, so that if
|
|
the program ever reached it control would quietly and automagically be
|
|
transferred to the statement following the COME FROM. COME FROM was first
|
|
proposed in R. Lawrence Clark's A Linguistic Contribution to GOTO-less
|
|
programming, which appeared in a 1973 Datamation issue (and was reprinted
|
|
in the April 1984 issue of Communications of the ACM ). This parodied the
|
|
then-raging structured programming holy wars (see considered harmful ).
|
|
Mythically, some variants are the assigned COME FROM and the computed COME
|
|
FROM (parodying some nasty control constructs in FORTRAN and some extended
|
|
BASICs). Of course, multi-tasking (or non-determinism) could be implemented
|
|
by having more than one COME FROM statement coming from the same label. In
|
|
some ways the FORTRAN DO looks like a COME FROM statement. After the
|
|
terminating statement number/ CONTINUE is reached, control continues at the
|
|
statement following the DO. Some generous FORTRANs would allow arbitrary
|
|
statements (other than CONTINUE ) for the statement, leading to examples
|
|
like: DO 10 I=1,LIMIT C imagine many lines of code here, leaving the C
|
|
original DO statement lost in the spaghetti... WRITE(6,10) I,FROB(I) 10
|
|
FORMAT(1X,I5,G10.4) in which the trapdoor is just after the statement
|
|
labeled 10. (This is particularly surprising because the label doesn't
|
|
appear to have anything to do with the flow of control at all!) While
|
|
sufficiently astonishing to the unsuspecting reader, this form of COME FROM
|
|
statement isn't completely general. After all, control will eventually pass
|
|
to the following statement. The implementation of the general form was left
|
|
to Univac FORTRAN, ca. 1975 (though a roughly similar feature existed on the
|
|
IBM 7040 ten years earlier). The statement AT 100 would perform a COME FROM
|
|
100. It was intended strictly as a debugging aid, with dire consequences
|
|
promised to anyone so deranged as to use it in production code. More
|
|
horrible things had already been perpetrated in production languages,
|
|
however; doubters need only contemplate the ALTER verb in COBOL. COME FROM
|
|
was supported under its own name for the first time 15 years later, in
|
|
C-INTERCAL (see INTERCAL, retrocomputing ); knowledgeable observers are
|
|
still reeling from the shock.
|