Ironically, one of the hardest things about a C compiler is the preprocessor. You'd think a text macro processor would be simple, and it should be simple. There's an amazing amount of subtle complexity in just the handful of pages describing it in the Standard.
I and many others implemented a C compiler based on K+R, and I can attest that a lot of rework can be avoided if following a Standard instead (C89 did not exist at the time).
I'm pretty sure it's the
hardest language to implement
Harder than languages that require JIT compilers to achieve reasonable performance?Even scalac and ghc are pretty complex beasts in order to Scala and Haskell reasonably speedy.
Of course, I should have said "front end". Working on the optimizer/codegen is an endless process.
Meta-tracing a la PyPy is such a revolution because it enables low-cost creation of reasonably performant tracing JIT compilers.