Its a false premise so often repeated. I am really tired. Compilers are ruleset: If you pass it one statement it'll produce the same output all the time. Its easy to verify it works. And if enough people have used it before and found no problems, there probably aren't many. Spoiler: People always find niche bugs.
But an LLM will generate you two completely different things today and tomorrow. Heck, even if you stash its changes and redo the same prompt.
Even though I disagree with (when I worked on CUDA at nvidia if I ran the TOT compiler on the same shaders one day and the next they could often change), the point is not to compare the two things side by side. It's just to say there are lots of times in life where for whatever reason we can give up old jobs.
When encountering a difficult problem, add an indirection.
That indirection, in the case of LLMs, is formal proof. It can actually turn an LLM into a sort of compiler. Where, if the compiler run completes successfully, you don't need another run, and you are sure it is correct.
Compiler generated machine code is however going from something (fairly) well defined (higher level representation) to something else about equally well defined (lower level representation).
In that sense it's a lot closer to translating Italian to English than what LLMs are doing.
I trust LLMs a lot more if I have a complete Go program I want them to rewrite in Rust.
reply