Googling this probably isn't a good idea. It's a loaded concept that means different things to different people.
For Darwinbots, basically, all the data is physically stored in various singleton managers in the engine. Data is passed into algorithm singletons that modify and change it.
Pros:
Additional non core modules can easily be worked in (GUI, stats tests, etc.) without core modules worrying about them. The core engine can be entirely ripped from the GUI, and vice versa, enforcing strictly bound problem domains.
Cons:
If the data representation changes, all of the modules need to be changed that deal with that data. Different files need to be maintained between C# struct definitions and C++ definitions. Const correctness is difficult (and in some ways unnecesary).
It's basically identical to more proper OO designs, except you're splitting the implementation and data apart. The idea is that you can rip out certain modules (say, physics), replace modules (again, say physics), or add modules without modifying other modules. This isn't as true for OO design, which follows a more hierarchial approach.
I'm not too sure of the wisdom of using two different languages, since it requires proficiency in two instead of one languages. Besides, portability is one thing, but actually being ported is the real goal. We have much more chances of attracting Linux or Mac users if they have a GUI (almost) up and running than if they have to build it from scratch before using the program. I really think the whole program, not just the engine, should be portable.
Have you done any programming with .NET? It's absolutely spectacular. Between GUI building, database support, internet controls, and other features I'm still discovering, it takes alot of the head scratching out of some of the features I'd like to add to Darwinbots.
There are also .NET exports to linux such as Mono, that probably will let you run Darwinbots on other platforms. I say probably because I've heard reports that some of the more abstract features are missing.
I could program it all in C#, but I'm more familiar with C++ and there's already a 13K line code base that's written in C++. Moving it all to C# is a question worth discussing, but I'm not sure the time required to do so would be worth it. I'm not sure I can think of a good reason not to move it to C# beyond my lack of knowledge, the time it would take, and portability issues.
If someone wants to take the time to refactor the current code into C#, that would be cool. Or if anyone can think of other valid reasons to maintain the code in C++. My experience with C# is still intermediary.
Anyway, you should take a look at my version of the code. I believe I made significant progress wrt. goals 2, 3 and 5.
I did like the idea of loading the DNA and copying it to instances of a species insetad of reloading it for every individual. What really needs to happen is that the Robot class needs to be split up into like 6 different core ideas. Major refactoring work. I'm still working on what sorts of splitting need to be performed.