
I would like to see a new programming paradigm. A paradigm more similar to how nature makes use of parallelism. Take a human cell for example. Every cell contains the exact same program(the DNA) but still the cells can form a complex being out of a single cell. Why does not the human cells act like bacteria that just multiply, making copies of itself.
The secret is that when a human cell divides the program counter, the DNA decoding device, is not placed at the beginning of the code. The child cells will run another part of the code even thought it contains the exact same code. Tom Ray made some initial promising studies on this in his Tierra project. Also he added another piece of the puzzle to his evolving code snippets. He designed a computer language that was very robust to random changes, something the CPU in your computer in front of you is not. Make a random change to a PC program and the program will break.
But isn't this exactly what a fork in a C program does, dividing the code in two and setting the program counter to a new place for the child? Yes, it is, the difference is how the processes communicate. In a PC one process writes to memory and another reads, this has to be controlled very strictly, every process knows what the other processes are supposed to do, and who will listen to a specific message. In a living being the child processes are on their own, no message(chemical) is meant for a specific cell. This approach adds hugely to the evolvability of a system. An interesting thing is that there is nothing in the computers design that keeps us from doing it in natures way, it is just very hard to write programs like these with the languages and operating systems we have today. Ask a Linux kernel developer what he thinks about inter process communication, I think he would welcome something new.
No comments:
Post a Comment