Went on vacation for a few days, now I'm ready to come back and face the new problems.
Bots will sometimes evolve a b store, I've seen it in the more recent versions, but you must remember that it's rather rare for any kind of massive run (3 whole commands!) to be useful at all since they're just picked at random.
Here's the way I see it. Yeah, a bot that evolves a complex function to just get 4 seems odd. But remember that the store statement takes the top two values in the stack, and doesn't care how it gets them.
So suppose we call our 500 command function f(x). we have f(x) b store. A new mutation may insert an "a" after f(x), making it f(x) a b store, which entirely overrides the whole 500 command f(x). If the "a" is doing what f(x) used to, f(x) will slowly degrade into something else, maybe junk, maybe useful. If a single command like that can't replace the whole f(x) thing, then f(x) is obviously doing something that's important.
So I definately don't see this as a problem, since a single mutation can replace large sections of code. The easiest way to "fix" it so that larger DNAs are selected against is to incurr some built in costs on DNA replication. Not incredibly difficult to set up and be user definable.
About genes communicating via the stack: assuming you view this as undesirable (depends on what you're trying to do of course) we could implement a clearst command that erases the stack. Bots can evolve them or no depending on their usefulness.
Also, the chromosome idea I proposed would allow for seperate stack threads so you can evolve several different DNA threads that can't communicate through the stack except within the same chromosome.
As to the evolution of Bot's bot, I would try running a sim with Zero Momentum mode and largest sim size. Just decrease costs until the bots can survive (they can definately survive if nothing costs any energy, so there must be some cost level they can survive on), and then instead of increasing physics constants, increase the costs. That would select for efficiency.
I'll implement an optional cost-per-DNA-unit (either per reproduction or per cycle) so we can play with downward selective pressure on DNA length.