Question: Why two back ends instead of one?
Answer: The interpreter covers the whole language, strings, floating point and structs included. The raw x86 assembly generator has no heap and no string runtime, so instead of emulating what does not fit, every unsupported node raises a named error — the limit is explicit in the code, not hidden behind wrong behavior.
