1.make deferred semantic more efficient. currently it's stored in a list, and redo semantic. the idea is redo semantic in a sequence which determined by dependency track info. a.semantic fails because of b.semantic therefore a.semantic won't be called till b.semantic is called. 2.tuple, mixin semantic bugs 3.reorganize statement syntax tree. current flow analysis don't have the ability to anaylize: void func() { while(true) { goto returnstmt; } returnstmt: return; } the while statement can actually fall through because of the goto statement. 4.glue with llvm, therefore CodeDom , JIT is possible for D 5.fix forward reference bugs. maybe an extra semantic pass is required. 6.provide possibility of incremental parsing and hot patch.