>>>
I took it from Crispin's paper
and I assumed it was correct as he has done a
lot of work on this...
.. and I assumed when he said "solve all problems" we were referring to
problems that can be solved on a Turing Complete computer....
<<<<
It is easy to prove that a computer does not need the ability to run self-modifying
code*:
Assume the contrary
Write a emulator running on a non-self-modifying machine for the machine that has
self-modifying code
(does anyone think that this is not possible? Mathematically - if not practically - this
is trivial)
Then the emulated machine can solve the problem and thus the machine running the emulator
can.
(there are some loose ends to tidy up to make this a formal proof but none of them are
game-changers.)
* Obviously (!) to load a program into memory for execution is, in a sense,
self-modification. However I
don't think that is what you mean.
Early 3rd generation machines had special instructions to finagle their way around
self-modifying code:
The/360 had EX
The 1900 had OBEY
The GE6xx had a rather fancy variation but I forget what it was called.
However it was soon discovered that these were almost as dangerous as self-modifying code,
not actually necessary.
Also with the introduction of re-entrant code (and paging) self-modifying became /really
bad/ (tm)
Andy