Basic block versioning can compile multiple versions of a given basic block based on context information (e.g. type information) accumulated during compilation. This approach is similar to tracing JIT compilation in that, like tracing, it's preoccupied with accumulating type information along linear sequences of code, and using this accumulated information to specialize code farther along, with the important difference that we're working at a lower granularity, that of basic blocks, instead of traces. As far as I know, Higgs is going to be the first compiler to feature incremental lazy compilation of functions and incremental inlining (if anyone has references to prior art, please let me know).