[Push] Top Level Code or Exec?

Lee Spector lspector at hampshire.edu
Tue Apr 20 07:53:48 EDT 2010


Rud,

Glad to hear it's working and the unit testing framework sounds really helpful.

On CODE.DO and CODE.DO* semantics, since Push3 "execute" really just means "move to the EXEC stack and keep going." I can see that we could be more explicit about this.

 -Lee

On Apr 20, 2010, at 1:43 AM, Rud Merriam wrote:

> Thanks, Lee & Maarten,
> 
> The confusion goes back to my original email last week. I was assuming that
> CODE.DO and CODE.DO* executed the code on their stack directly since the
> documentation did not say they should move the list to the EXEC stack. The
> documentation for DO*RANGE & DO*TIMES said this explicitly so I assumed with
> the others not saying it they didn't move the list. 
> 
> Got the 'float power' example in the documentation working tonight which I
> think is complicated enough that the interpreter is working well. I did get
> hung up a bit on the example until I realized it needed an ARG after the
> FLOAT.DEFINE to put the starting value back on the stack. (I implemented
> DEFINE to pop the value from the stack when it is being defined. Is that
> wrong?)
> 
> Thought maybe you'd be interested to know that I setup unit tests using a
> C++ framework called TUT. There is a unit test for each instruction that
> I've implemented, plus list manipulation routines. The unit test checks the
> key points like the values on the stacks and stack depths. Unit testing was
> just coming into popularity as I was winding down my employment period (I am
> now retired). After I got the example working I ran all the unit tests and
> all but one worked and it just needed parens around the input list. 
> 
> Now onto genetic operators...
> 
> 
> - 73 - 
> Rud Merriam K5RUD 
> http://mysticlakesoftware.com/
> 
> 
>> -----Original Message-----
>> From: Lee Spector [mailto:lspector at hampshire.edu] 
>> Sent: Monday, April 19, 2010 8:29 PM
>> To: Maarten Keijzer
>> Cc: push at lists.hampshire.edu; Rud Merriam
>> Subject: Re: [Push] Top Level Code or Exec?
>> 
>> 
>> 
>> Same deal in the other implementations that I know about, 
>> although not implemented with CODE.DO* (although that is 
>> indeed elegant). 
>> 
>> It has to go on to the EXEC stack to be executed, and putting 
>> it on the CODE stack is handy for programs that manipulate 
>> their own code. In several implementations the push onto the 
>> CODE stack (and the post-run popping of the CODE stack, which 
>> in Maarten's implementation will also be accomplished by 
>> CODE.DO*) can be turned on or off with a parameter.
>> 
>> -Lee
>> 
>> On Apr 19, 2010, at 4:01 PM, Maarten Keijzer wrote:
>> 
>>> 
>>> We wanted to have the program code on the code stack for 
>> the program 
>>> to
>>> manipulate. Although code on the exec stack could in 
>> principle copy itself on 
>>> the code stack (with some trouble), we thought it would be 
>> easiest to push the 
>>> code to be executed both on the code stack AND on the exec stack.
>>> 
>>> So that's what we do. In the C++ version, this is called the push 
>>> calling
>>> convention, and it is implemented by pushing code on the 
>> CODE stack, and 
>>> pushing the CODE.DO* instruction on the exec stack.
>>> 
>>> hth,
>>> 
>>> -Maarten-
>>> 
>>> 
>>> On Monday 19 April 2010 09:46:21 pm Rud Merriam wrote:
>>>> The documentation on Push3 is a bit confusing as to where 
>> to load a 
>>>> program.
>>>> 
>>>> In discussing configuration and later in the Factorial example the 
>>>> implication is that a program is read from a file and then pushed 
>>>> onto the CODE stack.
>>>> 
>>>> But the description of the execution environment - where 
>> the CODE and 
>>>> EXEC execution is contrasted - seems to imply a program is pushed 
>>>> onto the EXEC stack. This is in the Push Concepts section.
>>>> 
>>>> I'm guessing the pushing to CODE is the approach used, although it 
>>>> seems inconsistent with the switch to EXEC in Push3.
>>>> 
>>>> 
>>>> - 73 -
>>>> Rud Merriam K5RUD 
>>>> http://mysticlakesoftware.com/
>>>> 
>>>> 
>>> _______________________________________________
>>> Push mailing list
>>> Push at lists.hampshire.edu 
>>> https://lists.hampshire.edu/mailman/listinfo/push
>> 
>> --
>> Lee Spector, Professor of Computer Science
>> School of Cognitive Science, Hampshire College
>> 893 West Street, Amherst, MA 01002-3359
>> lspector at hampshire.edu, http://hampshire.edu/lspector/
>> Phone: 413-559-5352, Fax: 413-559-5438
>> 
>> Check out Genetic Programming and Evolvable Machines: 
>> http://www.springer.com/10710 - http://gpemjournal.blogspot.com/
>> 
>> _______________________________________________
>> Push mailing list
>> Push at lists.hampshire.edu 
>> https://lists.hampshire.edu/mailman/listinfo/push
>> 
> 
> _______________________________________________
> Push mailing list
> Push at lists.hampshire.edu
> https://lists.hampshire.edu/mailman/listinfo/push

--
Lee Spector, Professor of Computer Science
School of Cognitive Science, Hampshire College
893 West Street, Amherst, MA 01002-3359
lspector at hampshire.edu, http://hampshire.edu/lspector/
Phone: 413-559-5352, Fax: 413-559-5438

Check out Genetic Programming and Evolvable Machines:
http://www.springer.com/10710 - http://gpemjournal.blogspot.com/



More information about the Push mailing list