fbpx
Wikipedia

COMEFROM

In computer programming, COMEFROM (or COME FROM) is an obscure control flow structure used in some programming languages, originally as a joke. COMEFROM is the inverse of GOTO in that it can take the execution state from any arbitrary point in code to a COMEFROM statement.

The point in code where the state transfer happens is usually given as a parameter to COMEFROM. Whether the transfer happens before or after the instruction at the specified transfer point depends on the language used. Depending on the language used, multiple COMEFROMs referencing the same departure point may be invalid, be non-deterministic, be executed in some sort of defined priority, or even induce parallel or otherwise concurrent execution as seen in Threaded Intercal.[citation needed]

A simple example of a "COMEFROM x" statement is a label x (which does not need to be physically located anywhere near its corresponding COMEFROM) that acts as a "trap door". When code execution reaches the label, control gets passed to the statement following the COMEFROM. This may also be conditional, passing control only if a condition is satisfied, analogous to a GOTO within an IF statement. The primary difference from GOTO is that GOTO only depends on the local structure of the code, while COMEFROM depends on the global structure – a GOTO transfers control when it reaches a line with a GOTO statement, while COMEFROM requires scanning the entire program or scope to see if any COMEFROM statements are in scope for the line, and then verifying if a condition is hit. The effect of this is primarily to make debugging (and understanding the control flow of the program) extremely difficult, since there is no indication near the line or label in question that control will mysteriously jump to another point of the program – one must study the entire program to see if any COMEFROM statements reference that line or label.

Debugger hooks can be used to implement a COMEFROM statement, as in the humorous Python goto module;[1] see below. This also can be implemented with the gcc feature "asm goto" as used by the Linux kernel configuration option CONFIG_JUMP_LABEL. A no-op has its location stored, to be replaced by a jump to an executable fragment that at its end returns to the instruction after the no-op.

History Edit

COMEFROM was initially seen in lists of joke assembly language instructions (as 'CMFRM'). It was elaborated upon in a Datamation article by R. Lawrence Clark in 1973,[2] written in response to Edsger Dijkstra's letter Go To Statement Considered Harmful. COMEFROM was eventually implemented in the C-INTERCAL variant of the esoteric programming language INTERCAL along with the even more obscure 'computed COMEFROM'. There were also Fortran proposals[3] for 'assigned COME FROM' and a 'DONT' keyword (to complement the existing 'DO' loop).

On 1 April 2004, Richie Hindle published an implementation of both GOTO and COMEFROM for the Python programming language.[1] Despite being released on April Fools' Day and not being intended for serious use, the syntax is valid and the implementation fully works.

Practical uses Edit

Examples Edit

The following is an example of a program in a hypothetical BASIC dialect with "COMEFROM" instead of "GOTO".

10 COMEFROM 40 20 INPUT "WHAT IS YOUR NAME? "; A$ 30 PRINT "HELLO, "; A$ 40 REM 

This program (hypothetically) works by asking the user for their name, greeting them with the same name, and continuing all over again. The instruction "REM" on line 40 is simply a NOP (in this case, a REMark or comment) — the "COMEFROM" statement on line 10 causes a branch back to that line when execution reaches line 40, regardless of its contents.

A fully runnable example in Python with the joke goto module installed (which uses debugger hooks to control program execution) looks like this:

from goto import comefrom, label comefrom .repeat name = raw_input('What is your name? ') if name: print("Hello", name) label .repeat print("Goodbye!") 

This is an implementation in Ruby of the Intercal COME FROM statement.

$come_from_labels = {} def label(l)  if $come_from_labels[l]  $come_from_labels[l].call  end end def come_from(l)  callcc do |block|  $come_from_labels[l] = block  end end 

OS/360 Fortran G Edit

The OS/360 Fortran G compiler has a debug packet feature. Its "AT" statement is similar to COMEFROM in that it hands the control flow over to the debug block. Breakpoints in general are similar.[4]

  • Example 1: the values of SOLON, GFAR, and EWELL are examined as they were at the completion of statement 10. The AT statement indicates statement 11.
  INTEGER SOLON, GFAR, EWELL    .    .    . 10  SOLON = GFAR * SQRT(FLOAT(EWELL)) 11  IF (SOLON) 40, 50, 60    .    .    .   DEBUG UNIT(3)   AT 11   DISPLAY GFAR, SOLON, EWELL   END 
  • Example 2: all the values of STOCK are displayed when statement 35 is encountered.
  DIMENSION STOCK(1000),OUT(1000)    .    .    .   DO 30 I=1, 1000 25  STOCK(I)=STOCK(I) - OUT(I) 30  CONTINUE 35  A = B + C    .    .    .   DEBUG UNIT(3)   AT 35   DISPLAY STOCK   END 
  • Example 3: tracing begins at statement 10, at statement 20, tracing stops while the loop is executed, and resumes after the loop. Tracing stops just before statement 30 is executed.
10  A = 1.5 12  L = 1 15  B = A + 1.5 20  DO 22 I = 1,5    .    .    . 22  CONTINUE 25  C = B + 3.16 30  D = C/2   STOP    .    .    .   DEBUG UNIT(3), TRACE C DEBUG PACKET NUMBER 1   AT 10   TRACE ON C DEBUG PACKET NUMBER 2   AT 20   TRACE OFF   DO 35 I = 1,3    .    .    . 35  CONTINUE   TRACE ON C DEBUG PACKET NUMBER 3   AT 30   TRACE OFF   END 

See also Edit

Serious programming contrivances involving ideas resembling COMEFROM:

References Edit

  1. ^ a b Hindle, Richie (1 April 2004), goto for Python, Entrian.
  2. ^ Clarke, Lawrence, , Datamation (article), archived from the original on 2018-07-16, retrieved 2004-09-24.
  3. ^ Modell, Howard; Slater, William (April 1978). "Structured programming considered harmful". ACM SIGPLAN Notices. 13 (4): 76–79. doi:10.1145/953411.953418. Retrieved 18 July 2014.
  4. ^ IBM System/360 and System/370 Fortran IV Language, GC28-6515-10, May 1974
  5. ^ F. X. Reid, On the Formal Semantics of the COMEFROM Statement. FACS FACTS, Issue 2006-1, pages 18–20, March 2006.

External links Edit

  • COMEFROM Information Page
  • comefrom support for Perl

comefrom, computer, programming, come, from, obscure, control, flow, structure, used, some, programming, languages, originally, joke, inverse, href, goto, html, class, redirect, title, goto, goto, that, take, execution, state, from, arbitrary, point, code, sta. In computer programming COMEFROM or COME FROM is an obscure control flow structure used in some programming languages originally as a joke COMEFROM is the inverse of a href GOTO html class mw redirect title GOTO GOTO a in that it can take the execution state from any arbitrary point in code to a COMEFROM statement The point in code where the state transfer happens is usually given as a parameter to COMEFROM Whether the transfer happens before or after the instruction at the specified transfer point depends on the language used Depending on the language used multiple COMEFROMs referencing the same departure point may be invalid be non deterministic be executed in some sort of defined priority or even induce parallel or otherwise concurrent execution as seen in Threaded Intercal citation needed A simple example of a COMEFROM x statement is a label x which does not need to be physically located anywhere near its corresponding COMEFROM that acts as a trap door When code execution reaches the label control gets passed to the statement following the COMEFROM This may also be conditional passing control only if a condition is satisfied analogous to a GOTO within an IF statement The primary difference from GOTO is that GOTO only depends on the local structure of the code while COMEFROM depends on the global structure a GOTO transfers control when it reaches a line with a GOTO statement while COMEFROM requires scanning the entire program or scope to see if any COMEFROM statements are in scope for the line and then verifying if a condition is hit The effect of this is primarily to make debugging and understanding the control flow of the program extremely difficult since there is no indication near the line or label in question that control will mysteriously jump to another point of the program one must study the entire program to see if any COMEFROM statements reference that line or label Debugger hooks can be used to implement a COMEFROM statement as in the humorous Python goto module 1 see below This also can be implemented with the gcc feature asm goto as used by the Linux kernel configuration option CONFIG JUMP LABEL A no op has its location stored to be replaced by a jump to an executable fragment that at its end returns to the instruction after the no op Contents 1 History 2 Practical uses 2 1 Examples 2 2 OS 360 Fortran G 3 See also 4 References 5 External linksHistory EditCOMEFROM was initially seen in lists of joke assembly language instructions as CMFRM It was elaborated upon in a Datamation article by R Lawrence Clark in 1973 2 written in response to Edsger Dijkstra s letter Go To Statement Considered Harmful COMEFROM was eventually implemented in the C INTERCAL variant of the esoteric programming language INTERCAL along with the even more obscure computed COMEFROM There were also Fortran proposals 3 for assigned COME FROM and a DONT keyword to complement the existing DO loop On 1 April 2004 Richie Hindle published an implementation of both GOTO and COMEFROM for the Python programming language 1 Despite being released on April Fools Day and not being intended for serious use the syntax is valid and the implementation fully works Practical uses EditExamples Edit The following is an example of a program in a hypothetical BASIC dialect with COMEFROM instead of GOTO 10 COMEFROM 40 20 INPUT WHAT IS YOUR NAME A 30 PRINT HELLO A 40 REM This program hypothetically works by asking the user for their name greeting them with the same name and continuing all over again The instruction REM on line 40 is simply a NOP in this case a REMark or comment the COMEFROM statement on line 10 causes a branch back to that line when execution reaches line 40 regardless of its contents A fully runnable example in Python with the joke b goto b module installed which uses debugger hooks to control program execution looks like this from goto import comefrom label comefrom repeat name raw input What is your name if name print Hello name label repeat print Goodbye This is an implementation in Ruby of the Intercal COME FROM statement come from labels def label l if come from labels l come from labels l call end end def come from l callcc do block come from labels l block end end OS 360 Fortran G Edit The OS 360 Fortran G compiler has a debug packet feature Its AT statement is similar to COMEFROM in that it hands the control flow over to the debug block Breakpoints in general are similar 4 Example 1 the values of SOLON GFAR and EWELL are examined as they were at the completion of statement 10 The AT statement indicates statement 11 INTEGER SOLON GFAR EWELL 10 SOLON GFAR SQRT FLOAT EWELL 11 IF SOLON 40 50 60 DEBUG UNIT 3 AT 11 DISPLAY GFAR SOLON EWELL END Example 2 all the values of STOCK are displayed when statement 35 is encountered DIMENSION STOCK 1000 OUT 1000 DO 30 I 1 1000 25 STOCK I STOCK I OUT I 30 CONTINUE 35 A B C DEBUG UNIT 3 AT 35 DISPLAY STOCK END Example 3 tracing begins at statement 10 at statement 20 tracing stops while the loop is executed and resumes after the loop Tracing stops just before statement 30 is executed 10 A 1 5 12 L 1 15 B A 1 5 20 DO 22 I 1 5 22 CONTINUE 25 C B 3 16 30 D C 2 STOP DEBUG UNIT 3 TRACE C DEBUG PACKET NUMBER 1 AT 10 TRACE ON C DEBUG PACKET NUMBER 2 AT 20 TRACE OFF DO 35 I 1 3 35 CONTINUE TRACE ON C DEBUG PACKET NUMBER 3 AT 30 TRACE OFF ENDSee also EditF X Reid an expert on the semantics of COMEFROM 5 Action at a distance IntercalSerious programming contrivances involving ideas resembling COMEFROM Pointcut in aspect oriented programming Continuation Database triggers Observer pattern Goto From signal routing blocks in MATLAB SimulinkReferences Edit a b Hindle Richie 1 April 2004 goto for Python Entrian Clarke Lawrence We don t know where to GOTO if we don t know where we ve COME FROM This linguistic innovation lives up to all expectations Datamation article archived from the original on 2018 07 16 retrieved 2004 09 24 Modell Howard Slater William April 1978 Structured programming considered harmful ACM SIGPLAN Notices 13 4 76 79 doi 10 1145 953411 953418 Retrieved 18 July 2014 IBM System 360 and System 370 Fortran IV Language GC28 6515 10 May 1974 F X Reid On the Formal Semantics of the COMEFROM Statement FACS FACTS Issue 2006 1 pages 18 20 March 2006 External links EditCOMEFROM Information Page Datamation Article Joke Assembler Instruction List Including CMFRM comefrom support for Perl Retrieved from https en wikipedia org w index php title COMEFROM amp oldid 1136325250, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.