I think C is fine for a simple compiler. Why are algebraic data types so relevant? Pattern matching is nice, because switch statements plus unpacking is more verbose.
For big optimizing compilers you appreciate abstractions like C++ enables. for example, a data flow Analysis framework.