Interesting. Do you have pointers to any papers/implementations of optimizing compilers without abstract syntax trees. Also, are you still able to implement optimizations with the same effort? I'd gladly trade 10x longer compile time for 10% faster execution time.
> We can look at specific examples if you wish.
Common Subexpression Elimination, for example. Not just syntactically equal expressions but also cases like this:
a1 = b + c
a2 = c + b // eliminated
And how do you do loop fusion & interchange?
Edit: I now realise that we may be talking about different abstract syntax trees. I thought that you meant no intermediate data structures. But you probably meant that you don't need a parse tree, you can translate to the intermediate language directly from the source. If that's the case then here's another challenge: how do you produce error messages for type errors?