I credit this to two things. First, I started writing about the development process, which got me thinking about what's left to do and how much I really want the language. Second, I attended GoingNative 2012 - which is, by and large, a giant C++ party.
GoingNative was cool in its own right, but it radically cemented in my mind the certainty that Epoch is a necessity. All of the major outstanding issues in C++ programming are addressed (at least conceptually) by Epoch, and even a lot of the new C++11 features are done better (in my thoroughly not-humble opinion) in my conceptual versions of Epoch.
To this end, I've spent much of the past 18 hours hacking on Epoch vigorously. At the beginning of the marathon, the compiler was so utterly broken that (1) semantic checking didn't really even exist, (2) type inference was a distant dream, and (3) code generation was just plain never reached, because the compiler would vomit before it got there.
Throughout the course of these hours, I've managed to get a large volume of semantic checking down, and whittled away at spurious type system errors until the Era IDE source code compiles cleanly. There's still a few semantic errors that can't be detected by the current implementation, but I'll get those hammered out soon enough.
Type inference is loosely sketched in and shouldn't be terribly hard to return to the point where it used to be.
And, as of a few minutes ago, code generation is officially being performed again - although there are gaps in what it generates due to missing implementations of a few language features. The code can be generated but is hardly suitable for execution yet.
At this point, the challenges remaining in the R12 compiler rewrite are basically boiling down to reimplementation of language features. Notably, most of the language's overload semantics are broken right now, pattern matching is totally unsupported, and a fair few weird bugs are sure to be lurking in the semantic checker. This is a considerably more manageable chunk of work than what was left to do at this time yesterday... or at least, it seems that way.
As a final note of interest, parsing of the Era source code takes an average of 13ms on my crappy old laptop. Semantic validation is around 100ms, including the type inference pass. Code generation is about 7ms. This is stupid fast compared to the old compiler, which even in optimized Release builds was taking upwards of 30 seconds to do the same job. I estimate that the compiler is around 350x faster now, in a thoroughly unscientific set of tests. This is without optimizing memory allocation patterns in the semantic validation and AST transform phases.
Life looks really damn good right now.
[edit] Found some low-hanging optimization fruit in the semantic validation stuff. Down to 45ms, still without optimizing memory allocations. Can you say "daaayumn"?