Rust doesn’t have a stable ABI. OK, great.
But it’s not completely unstable. If I build the same code with the same compiler, I expect the ABI won’t change (if nothing else because I expect the output to be identical).
Do any compiler options change the ABI? Optimization level? LTO? Anything else? Building for a different target definitely will, and I’m guessing there might be some llvm ones which change register use.
Is there a document which definitively describes under what circumstances the ABI will remain stable, and ones where it’s not guaranteed?
Context: I have a cache which contains abomonation-serialized objects. Its is currently in-process only, but if I make it semi-persistent, can I determine the times when I need to invalidate it (eg, compiler updates)? (I’ll leave abomonation updates and type definition changes as a separate concern.)