From newshub.ccs.yorku.ca!ists!helios.physics.utoronto.ca!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!hemuli.tik.vtt.fi!news.funet.fi!sunic!seunet!mcsun!uknet!edcastle!aiai!jeff Tue Jan 21 09:27:38 EST 1992
Article 2941 of comp.ai.philosophy:
Xref: newshub.ccs.yorku.ca comp.ai.philosophy:2941 sci.philosophy.tech:1920
Path: newshub.ccs.yorku.ca!ists!helios.physics.utoronto.ca!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!hemuli.tik.vtt.fi!news.funet.fi!sunic!seunet!mcsun!uknet!edcastle!aiai!jeff
>From: jeff@aiai.ed.ac.uk (Jeff Dalton)
Newsgroups: comp.ai.philosophy,sci.philosophy.tech
Subject: Re: Causes and Reasons
Message-ID: <6026@skye.ed.ac.uk>
Date: 20 Jan 92 23:57:37 GMT
References: <5967@skye.ed.ac.uk> <1992Jan14.192736.24736@bronze.ucs.indiana.edu> <5994@skye.ed.ac.uk> <6467@pkmab.se>
Reply-To: jeff@aiai.UUCP (Jeff Dalton)
Organization: AIAI, University of Edinburgh, Scotland
Lines: 45

In article <6467@pkmab.se> ske@pkmab.se (Kristoffer Eriksson) writes:
>In article <5994@skye.ed.ac.uk> jeff@aiai.UUCP (Jeff Dalton) writes:
>>In article <1992Jan14.192736.24736@bronze.ucs.indiana.edu> chalmers@bronze.ucs.indiana.edu (David Chalmers) writes:
>>>It seems straightforward enough that there is a sense of "implement"
>>>in which optimizing compilers do not strictly implement the original
>>>program, as the implemented mechanisms don't follow all the steps
>>>specified in the program.
>>
>>But what, exactly, counts as a correct implementation in your
>>sense of the word?
>
>Procedural programming languages can be read as a specification of
>a specific algorithm, i.e. a number of distinct execution steps in
>a certain order (in contrast to a specification only of input/output
>behaviour). A specific unit of execution (execution step) can often
>be found for each language: the unit might for instance be single
>statements (with some provisions for what happens when a statement
>calls a user defined procedure or function). Each execution step
>brings the "virtual machine" of that language from one "state" to
>the next.

But the actual implementation of a language doesn't have to be
anything like the virtual machine.  For instance, pure Lisp could
run on a C machince, or a machine that does reduction (the spineless
G machine, perhaps) or a machine that does logical inference.
it can even be done for impure Lisp by explicitly representing
the store.  (Think of denotational demantics, e.g.)

Moreover, compilers are allowed to cheat, so long as no one can
tell.  But the way they tell is by examining such things as I/O.

For instance, there might be a rule in the semantics to the effect
that memory is in a certain well-defined state at certain sequence
points.  But so long as nothing depends on some detail of this state
being right, it doesn't have to be right.

>Now, I think that the sense of "implement" David Chalmers has in mind
>here, is one where each state of the "physical" system that implements
>the algorithm in question, can be identified with one and only one state
>of the virtual machine as specified by the language, and the transitions
>from one of the states so identified to another one, exactly follow the
>execution steps specified by the algorithm, just as in the finite state
>machine case.

I don't think a language specified a unique virtual machine.


