Self modifying code, lambda calculus - Re: ENIAC programming

Johnny Billquist bqt at update.uu.se
Thu Sep 17 18:17:28 CDT 2015


On 2015-09-17 18:01, Paul Koning wrote:
>
>> On Sep 16, 2015, at 11:36 PM, ben <bfranchuk at jetnet.ab.ca> wrote:
>>
>> On 9/16/2015 9:25 PM, Toby Thain wrote:
>>> On 2015-09-16 6:18 PM, Dave G4UGM wrote:
>>>>
>>>> ...
>>>> It is notable that in order to solve all problems, a computer must permit
>>>> self modifying code.
>>>
>>>
>>> Is that true? AFAIK Lambda calculus can describe any computable function
>>> (as can a Turing machine), and it has no concept of "self modifying code".
>>
>> I never studied any of that, but you do have to LOAD and RUN the program ToSolveAnythingBut42
>> some how so I guess that would count AS Self Modifying Code.
>
> "load" is an operation in a RAM stored program computer, sure.  But self-modifying code means a program that modifies its own code during execution.  That is a scheme that has on rare occasions been used in history.  You could also apply the term to instructions that store state  in the form of instructions in memory for later use, such as "return jump" in CDC machines.  But I wouldn't apply the term there; that's just a particular mechanism different from, but functionally equivalent, to a return address stack.

Well, "rare" is a strong claim. I know of this rather popular machine 
from DEC, the PDP-8, on which you have self-modifying code all over the 
place. :-)
And I'm not talking about the fact that the return address is stored in 
the first word of the function. I agree that this is not really 
self-modifying code at all. But any time you have multiple fields in a 
PDP-8, and you call a function in one field from another, the only way 
to know where to return to is by having the data field contain the field 
of the caller. And then the called function needs to change back to the 
callers field before doing a return. And the change field instruction is 
an instruction where the field is a part of the opcode, so the called 
function needs to read out the data field, create a change instruction 
field instruction, include the target field, and write this instruction 
into itself right before the return instruction.

And there are plenty of other examples of self-modifying code on the 
PDP-8, but all the others I can think of becomes way more complex to 
explain. :-)

	Johnny

-- 
Johnny Billquist                  || "I'm on a bus
                                   ||  on a psychedelic trip
email: bqt at softjar.se             ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol


More information about the cctalk mailing list