There are several architectures for computers, with
all being the
equal of the Turing machine.
That's interesting, because not one of the devices I have called
computers, used as computers, or heard/seen called computers, is even
theoretically equivalent to a Turing machine. In particular, they all
have finite storage.
Frankly, the Turing machine is the definition of a
computer,
I don't know where you got _that_, but it certainly doesn't match my
understanding, usage, or experience of others' ditto. As I remarked
above, there aren't any computers by that definition.
Nevertheless, for all systems of computation, there is
the
possibility of self-modification of code which is accessible through
other means, typically in the form of a file.
So I suppose a dedicated microcontroller (eg, code in mask-programmed
ROM) is not a "system of computation"?
Even if the application that's in ROM is, say, a pocket calculator?
A programmable pocket calculator?
The microcode-and-microcpu view of a CISC CPU chip?
Where do you draw the line?
Also, remember the features of some languages, like
APL, which will
operate on von Neumann and Harvard architectures, and which APL code
might include the execute operator, which facilitates run-time code
generation and execution.
In the sense of "code" for which the underlying CPU is a von Neumann or
Harvard machine, the execute operator does not necessarily imply
run-time code generation. (For example the APL engine may be a p-code
engine and the execute operator may generate p-code, which as far as
the underlying CPU is concerned is just more data. This returns to the
point above about where you pick the level at which you call some bits
data and other bits code.)
/~\ The ASCII der Mouse
\ / Ribbon Campaign
X Against HTML mouse(a)rodents.montreal.qc.ca
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B