1. A method of generative programming; said method comprising: receiving a grammar defining variable parameters; generating a candidate program using said grammar; evaluating said candidate program in accordance with predetermined criteria; and selectively repeating said generating and said evaluating.