Instead of a port, I'm thinking of a sequel. Take existing ideas that work, trash the ones that don't, and rehash it into an architecture that grows easily. Pull code from the C++ and VB versions as necessary.
The C++ source at present is a bit sloppy. It wouldn't be markedly easier to maintain than the VB version. I've been doing a lot of reading and research the last year or so, and I think I can devise a system that grows well. There are two primary ideas I've experimented with that have worked very well.
First,
This thesis paper explores various architectures that developers could use in games, and proposes what's called a "system of systems". Basically the data is stored in a central repository, and various modules (physics, DNA execution, save/load routines, etc.) operate on this data. I worked on a smaller project that used this design, and it worked quite well. New features are usually easy to add because the interdependency between modules is so low.
Second,
Unit testing was very useful in another project. I was working on a GUI library for a 3D engine, and built it using unit tests from the ground up. It's extremely useful for isolating, reproducing, and preventing bugs and catching pathological test cases. In a program that needs to run flawlessly for hundreds of hours, like Darwinbots, I think using a lot of unit tests from the start will prevent a build up of weird errors that are hard to pinpoint.
Following the two above, I'd like the major subsystems (DNA, physics, etc.) to have their own separate sandbox programs, unintegrated with the other systems. The DNA language could have a command line interpreter like Ruby does with irb. Physics could have a series of simple interactive demos. That way different programmers could work on seperate systems relatively easily, and there would be some simple programs new users (which would be practically everybody) can play and understand what's going on.
And last, pulling from SCRUM, I think a stable release every month, starting with something extremely basic, is a good way to go about it. Start with an empty interface, and add features iteratively.
I'm about half and half on using C# or C++ with different libraries. There are aspects of C# that lend itself very well to what Darwinbots can be, and there are also some details which I find maddening. Also, C++ generally has 3rd party libraries I'm more pleased with than those available for C#. I'm also evenly split on whether to build our own physics engine or use a 3rd party one. I've been doing a lot of research into physics engines, and the more I learn the more I realize how specialized Darwinbots is. I think a streamlined, simplified engine would give more aesthetically pleasing results. I know enough to program the system I want, I'm just not yet at the point where I can make it fast enough.