Multi-Core Multi-Language Machines
I was doing my traditional web searching about languages, this time beginning with parallel lisp. I was wondering, if LISP, being one of the oldest and original languages, had explored the concurrency model, and what concepts it had to offer. Immediately this search led me to a 3 part series [1,2,3] specifically on that topic, that, while a couple years old, still had a wealth of information, specifically pointing me in new directions.
I had never heard of the Lightweight Languages Workshops, and was very pleased to find an informative video about concurrency in Erlang from Joe Armstrong himself.
Over at Lambda the Ultimate I stumbled upon a post about Future(s) (with a talk about language research). From this I learned that my particular fetish, Domain Specific Languages, is becoming a fad, and that I can look forward to the widespread use of mini-languages and proliferation of interpreters.
So, how does all this come together? I find it self-evident that the widespread use of interpreters will be inefficient, specifically because those languages will be designed to run on a computer model (virtual machine) other than the native hardware; programs in these new languages will be forced to run in simulation. Multi-core CPUs can mitigate the slowness that we will see, however we can easily do much much better. Instead of having a CPU with 4 or 8 cores, why not have one with 2 or 4 cores bundled together with 2 or 4 on-die FPGAs? Now you don’t have to simulate a virtual machine, you can dynamically flash part of the CPU and get a hardware interpreter for your DSL. A webserver can have part of its hardware devoted to SQL, and part devoted to Php/Perl/Python/Java/Ruby/whatever. High performance computers could construct an optimized pipeline constructed specifically for a research problem. Suddenly we enter, not a world just of concurrency, but also of dynamic hardware through the use of silicon compilers. (Of course to take full advantage of such an architecture, you’d need another DSL).
Changing computer architecture in this fundamental way, will herald in a new era of computing. Not only will the software systems we build be dynamic, but they will run on dynamic hardware.