Steve Yegge relays a fracas about language interoperability...
He [Chris] asked this really innocent question. He goes, "You know, I don't really know much about this stuff..."I thought this was going to be interesting, then I found the conversation was about language interoperability *within* a VM.
Which is bad, you know. When somebody says that to you at Foo Camp, it means they're settin' you up.
He says, "So how do these languages talk to each other?"
And the room just erupted! It was chaos. All these people are like, "Oh, it's easy!" And the rest of them are like "No, it's hard!" And they're arguing, and arguing, and arguing. They argued for an hour.
And then they stood up, still arguing, and they kept talking about it, heading into the dinner tent. And they sat down, going at it for like three hours.
It was chaos.
Because some people were saying, "Well, you know, if Ruby's gonna call Python, well, uh, you just call, right? You just share the same stack, right?"
And the others are like, "Well, what about different calling conventions? What if they support optional vs. non-optional arguments? What if they support default arguments? What about the threading model? What about the semantics of, you know, the this pointer? What about all this stuff?"
And they're like (waving hands) "Ooooh, we'll gloss over it, gloss over it, smooth it over." And the reply is: "You can't. This is fundamental. These languages work differently!"
And oh my god, it was really interesting. And it was also very clear that it's ten years of research and implementation practice before they get this right. Before you'll be able to have a stack of calls, where you're calling from library to function, library to function in different languages.
So today, VMs are good for interoperability, but you've gotta use a bridge.