Complexity does not grow exponentially and not even polynomially because you lower things. At the backend, generics, closures, async and many other features are completely non-existent (except for debuginfo. Debuginfo is complicated).
That does not mean writing an optimizing compiler is easy, of course. The frontend for many modern languages (especially Rust) if also far from trivial.