Aaron Konstam wrote (about COMEFROM): > This joke is about 30 years old. It has been has been so long since it > was first mentioned that it is hard for me to explain clearly why this > is indeed not compilable but it is not. > I guess if one can't explain something clearly one should shut up. It > leads to situations which are logically unresolvable. As someone who has > taught compiler construction it should be obvious ot me why this is true > but my senior moments have caught up with me. If the detailed > explanation comes to me I will share it. As I understand it (and I'm certainly not a compiler expert): Computer languages do have to be well defined. If you have something like (pardon the pseudo-BASIC): 10 PRINT "Hello." 20 COMEFROM 40 30 PRINT "How to exercise a CPU in three instructions!" 40 PRINT "Normal definitions of COMEFROM say this will never be run..." 50 QUIT That *is* "compilable" since you can come up with a "valid" binary that does what the programmer expects. If on the other hand you have 10 PRINT "Hello." 20 COMEFROM 60 30 PRINT "Schrödinger may or may not have been here..." 40 COMEFROM 60 50 PRINT "but he *was* here!" 60 QUIT what happens when you get to line 60? Should the program restart from line 20 or line 40? With normal, single threaded programs, it's not possible to do both, so you can't get a binary that does. Therefore it's not compilable (without extra definitions). Suggested workarounds include returning to different COMEFROMS at random, or starting different threads (or forking new processes), one for each COMEFROM. James. -- E-mail: james@ | The attitude ``The computer said so, so it must be aprilcottage.co.uk | right'' is always amusing to the people who program them. | -- Geoff Lane