[Push] Evolution of modularity in Push
Lee Spector
lspector at hampshire.edu
Tue Mar 15 12:25:19 EDT 2011
Geoffrey,
Great question.
I don't think you're missing anything.
There have been some recent developments on the Push modularity front -- a few related comments are at push.i3ci.hampshire.edu, and there is an article on this under review -- but nothing so well developed (or at least written up) on locality/isolation, which I agree is important.
That said, a couple of years ago Maarten Keijzer developed an "ENV" (= environment) stack that can be used to store whole states of the interpreter. One can easily imagine using something like this to create local environments for function calls and to provide various other kinds of isolation/protection. As I recall there were a couple of slightly tricky issues to resolve, e.g. regarding return values, and I don't recall feeling like we had worked out the perfect solution to those. But I'm not sure -- Maarten might well have had good ways to do everything.
Maarten, if you're reading this then I'd love to have my memory refreshed on this, maybe with an push.i3ci.hampshire.edu post?
And Geoffrey and any others: I'd love to see progress on this and to contribute in any related discussions.
-Lee
PS Geoffrey I think your message bounced from the list because you're not a member, but I've added you to the "can post anyway" list and if you want you could join at https://lists.hampshire.edu/mailman/listinfo/push. Also let me know if you want to have posting privileges at push.i3ci.hampshire.edu.
On Mar 14, 2011, at 11:21 PM, Geoffrey Romer wrote:
> Dr. Spector et al-
>
> I came across Push while investigating genetic programming languages as part of a hobbyist alife project I'm tinkering with. I'm really impressed and excited by what I've seen so far- Push seems to neatly solve a lot of problems that I've been wrestling with. However, one problem has been nagging at me, and I was hoping you might be able to help me with it.
>
> The problem is this: I more or less understand how Push supports the evolution of reusable code, control structures, and so forth, but as far as I can see, it doesn't seem to support one other aspect of modularity, namely isolation. Push "functions" are defined by the cumulative effect of their constituent operations, not by any abstraction boundary like a function signature, and the language doesn't seem to provide any notion of data that is local to a module or unit of code. This seems particularly problematic in a genetic programming context: it means that any mutation which results in a different stack depth after executing the mutated region (as compared to the unmutated code) will have a cascading effect through all subsequent code, probably largely invalidating it.
>
> Do I understand this correctly, or am I missing something? The manual refers to local arguments, binding spaces, and environments as possible future features, all of which sound promising in this regard- have there been any developments on those fronts?
--
Lee Spector, Professor of Computer Science
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
More information about the Push
mailing list