Simon Peyton Jones
π€ SpeakerAppearances Over Time
Podcast Appearances
So they're two completely separable things.
So I'm quite proud about that.
Core, then we do a lot of core to core passes that simply take core programs and reduce core programs.
Lots and lots, long pipeline.
Then we convert it to C minus minus, which is a prototypical imperative language.
Think of it as a portable assembly code.
So that bit is meant to be platform independent.
So it's simply, that's the compiler that take, do you remember I said, if you take Lambda calculus and compile it, that's that step, right?
I want to compile the Lambda calculus into, you know, machine instructions, really, but I don't really mean machine, I mean portable machine instructions.
That's called C minus minus.
Then I want to convert C minus minus into actual machine instructions for various platforms.
And then we could either do that directly with a native code backend or go via LLVM.
Interesting.
Well, because what happens, assembly for which processor, please?
It is, yeah.
You could go straight, so there's work to go from lambda calculus.
You could go all the way to x86.
Then throw all that away and now go from lambda calculus to PowerPC.
oh, dear, I've just duplicated a lot of work.
By going from lambda calculus to C minus minus, and then from C minus minus to x86, C minus minus, we've avoided duplicating the work that went from lambda calculus to C minus minus, right?