I just read this entry from Joel and I laughed out loud. It's funny, but it's also incredibly insightful. In a way, it's Joel's answer to Steve's New Big Language, but much more ambitious in its predictions and prognostications. I like it a lot.
Just for the record, a few of the genius observations from this essay have briefly visited my thoughts. I've pondered the various Ajax user interfaces that are all over the place. I've really been bothered that writing a web application seems to be a major step backwards in development methodologies, not to mention how slow they are. Of course, I never bothered to write these ideas down and develop them like Joel has here. I'm kicking myself now for that. Oh well.
Actually, lately I've been pondering more about whether embedded software will ever be written in a higher-level language than C or C++ (no, I don't really consider C++ to be higher-level than C). I think the real-time parts of firmware will always have need to be optimizable down to assembly to squeeze out every last clock cycle, but there are large portions of firmware that aren't real-time. I guess cell phones are already running Java apps, but if you read Joel's blog entry, you notice that he pointed this scenario out precisely because it's a good example of how badly the Java VM approach works:
You can follow the p-code/Java model and build a little sandbox on top of the underlying system. But sandboxes are penalty boxes; they’re slow and they suck, which is why Java Applets are dead, dead, dead. To build a sandbox you pretty much doom yourself to running at 1/10th the speed of the underlying platform, and you doom yourself to never supporting any of the cool features that show up on one of the platforms but not the others. (I’m still waiting for someone show me a Java applet for phones that can access any the phone’s features, like the camera, the contacts list, the SMS messages, or the GPS receiver.)
So I don't think anything more than simple games are going to be written for embedded platforms in a higher level language like Java. I'm thinking most interpreted languages here, like Python, Ruby, etc. are in that "like Java" group in this scenario (sad, I know). It's going to have to be something that compiles to "native" code (the machine code for your target processor, of course), but still has high-level language features like memory management, and dynamic typing, and all those other things that we love about Perl, Python, and so forth. So let's hear it. What will be the NBL for embedded systems?