I'm a dilettante in a lot of things software-development related, but I do love watching the world go by. Every once in a while I see two things happen at once and wonder why they aren't aware of each other.

A few days ago I was reading a paper entitled: Buzz: An Extensible Programming Language for Self-Organizing Heterogeneous Robot Swarms. I don't know anything about robot programming, but I have read (and implemented, at least in simulation) Tim Skelly's description of "flocking" behavior for the 1980 video game "Rip-Off." Buzz was a pretty good paper. It starts out with a fantastic idea: when a robot goes from being independent to being part of a swarm, it needs new relationship management features, which the Buzz VM provides through a combination of live tracking of swarm membership, neighborhood awareness, and "virtual stigmergy," a way of emulating a buildup of sensory information until it crosses thresholds and causes new behavior in the entire swarm, emulating the way ant or bee hives collectively operate.

(Aside: The first video game to use stigmergy is PacMan: As PacMan moved, he left a "scent marker" on the square behind him that faded with every clock cycle until it reached zero; the probability that a ghost would turn was influnced by that scent trail. PacMan had easy-to-memorize patterns because the clock cycles were relatively large with respect to human reaction time and the probability had no randomization.)

But one thing that bugged me about Buzz was that the developers wrote their own language. It looks a little like Javascript, and a little like Perl, and a little like every other Algol-descendent. The author of Buzz even admit to hewing to "object-oriented programming jargon."

And then a few days later I saw the paper that explained why I was so bothered: Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development Swamp proposes that VM writers do too much with their language. A VM, they write, should deal with exactly three issues: memory, hardware, and concurrency. Buzz does that-- and then it does so much more. Swamp says that everything else should be left to the language developers. Once you've got concurrency, memory (really, garbage collection) and hardware abstraction down in the VM, your VM should get out of the way.

If the writers of Buzz had gone down this route, they could have spent all their time making sure to get the concurrency issues around swarm membership and virtual stigmergy absolutely correct and performant, and allowed the language development guys in their team layer any language they wanted on top: Lua, Javascript, Lisp. Even their own Buzz.

So, Buzz, Mu, I must highly recommend you to each other.

Bring on the robot apocalypse.