The Push Programming Language

Push 3.0 Language Description:

Push is a programming language intended primarily for use in evolutionary computation systems (such as genetic programming systems), as the language in which evolving programs are expressed. Push has an unusually simple syntax, which facilitates the development (or evolution) of mutation and recombination operators that generate and manipulate programs. Despite this simple syntax, Push provides more expressive power than most other program representations that are used for program evolution. Push programs can process multiple data types (without the syntax restrictions that usually accompany this capability), and they can express and make use of arbitrary control structures (e.g. recursive subroutines and macros) through the explicit manipulation of their own code (via a "CODE" data type). This allows Push to support the automatic evolution of modular program architectures in a particularly simple way, even when it Push is employed in an otherwise ordinary genetic programming system (such as PushGP, which is a "generic" GP system except that it evolves Push programs rather than Lisp-style program trees). Push can also support entirely new evolutionary computation paradigms such as "autoconstructive evolution," in which genetic operators and other components of the evolutionary system themselves evolve (as in the Pushpop and SwarmEvolve2 systems).

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.


It's a nice paper, but it rather leaves people new to GP out in the cold. When would I want to randomly evolve a program? Is this useful if I want to try and grow a faster version of my hand written code or something like that? Or just for fun? Or am I missing some deeper impact here ...


Here's a nice introductory example . The same site contains many more examples and ideas.

Not What I Expected

Good to see a dedicated GP language, but it raises a few questions. What advantages does it offer over other stack machine languages e.g. Forth? Was any research done into the bias (or lack thereof) of its instruction set? There has been some research into the use of minimal instruction set languages in connection with GP that promises to address (or at least explore) this issue:

Also the problem of invalid instructions/programs, which Push handles in the usual way (by interpreting them as NOOPs), is neatly evaded by Grammatical Evolution, which effectively guarantees well-formed programs, as well as allowing the genetic material to be position independent, thereby avoiding some of the more deleterious effects of crossover and mutation:

Also, it's not clear from the movies what Push brings to the table that hasn't already been implemented with a much simpler set of rules by Reynolds' Boids (or its Java fledgling Floys).

The funny thing is, I often play around with Turing tarpit languages such as Brainfuck and Jot as GP languages, but in this case I'm tempted to ignore the language's GP aspirations and play around with it as a general purpose intermediate language :-)