For(){} it's normally either undefined or has a specific meaning. "Then iterate and do x" might mean many subtly different things.
Most programmers never deal with a compiler bug in their whole career, and can dismiss the possibility. For LLMs it would be hard to even define what a "compiler bug" would be since there is no specification for English.
Then there's the fact that models generally don't guarantee anything at all. Sonnet can change under your feet.
Models also degrade as the context window gets larger. Compilers handle one line just the same as 20.
I could keep going, there's so many fundamental differences in the process that the analogy only serves to provide a false feeling of security.
But the GP stands.
LLM code generation: "Here is an intent/specification. Invent code that hopefully satisfies it."
Does the compiler analogy provide value under those terms? I don't think it does. In fact, I think it provides negative value.
We don't need to use tortured analogies to express excitement over these tools.