C, C++, Pascal all define the order explicitly, the platform ABI generally defines the padding rules.
C, C++, Pascal all define the order explicitly, the platform ABI generally defines the padding rules.
If you include toy languages, you might get there.
Even languages like Go and Rust recognize that at API boundaries you need a stable and defined ABI.
These languages still allow you to consume and provide C compatible ABIs explicitly but this does not interfere with data optimizations for native data.
Go and rust can’t be used for system libraries: you have to create C interface. This means that if you have two libraries, both written in rust then they have to communicate through a C layer.
The alternative (what rust does) is to have every application contain a complete copy of every library it uses, which is horrific for performance.
Yep, not shipping (native) compiled code is usually how you end up with no ABIs. But these these languages and runtimes still don't really support optimizations of data structures very well, I think it's largely because they weren't specified and implementerd to do it from the start and now there are all kinds of ingrained things about the semantics and estsabilished implementations and user expectations that get in the way of doing big things like feedback based rewriting of data layouts.