3 ms·
A call to a standard library function is still subject to the as if rule. It doesn't have to manifest into a call instruction to a standard library function. Mu
by leni536 8d ago
A call to a standard library function is still subject to the as if rule. It doesn't have to manifest into a call instruction to a standard library function. Much like memcpy in source code doesn't have to manifest to a call instruction.
- fc417fc802 8d agoMe: I don't expect to be stabbed. You: But you only might be stabbed. It isn't required to happen only permitted.
- leni536 7d agoA bad but conforming implementation of the standard can screw you over on every line of your program.
- ack_complete 8d agoYes, but the compiler does have to preserve any observable behavior produced by the call to the standard library function. Being able to omit this inserted yield() by the as if rule would mean that it isn't observable, which would also mean that the compiler could already add or not add it anywhere as needed without changing the behavior of the program. Which would seemingly make the inserted yield() pointless as it would have no effect.
- leni536 7d agoArguably the only change to program behavior is to performance characteristics on hosted environments. It does not change any observable behavior otherwise. In environments where there are strong forward progress guarantees a busy infinite loop does the same as far as the abstract machine is concerned, as the OS will eventually put the thread to sleep anyway and other threads can make progress. How soon the thread yields is not "observable behavior" (as defined by the standard document).