I now tried to bring it to the next level, using concurrency to bread a couple of populations and make the best solutions migrate between them. But, to use concurrency in D, one has to continually cast between immutable, cast immutable away, .... Not only that, casting away from immutable (or too, the error message is not informative at all) you get error's along the line of "opEquals doesn't work with immutable arguments"...
Why is it that cumbersome? It seems like D took a good idea and ruined it with all that const-stuff. I have the feeling that I've completely missed the whole idea on how concurrency in D should work. Is it normal that you have to either mess with immutable or with the broken shared? Am I implementing everything wrong?