| ▲ | marcosdumay 8 hours ago |
| I don't understand your problem. Did you expect your C++ program to get uninterrupted access to the computer? What progression do you think isn't happening there? I think you are misinterpreting that. That phrase unambiguously says the loop is preserved on the final binary. |
|
| ▲ | JoshTriplett 8 hours ago | parent | next [-] |
| I expect an infinite loop to be compiled into, for instance, a jump instruction jumping to itself. The OS, if there is any, is welcome to interrupt and context switch. I don't expect code that has no function calls at all to have a system call inserted into it. |
| |
| ▲ | leni536 7 hours ago | parent | next [-] | | 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 4 hours ago | parent [-] | | Me: I don't expect to be stabbed. You: But you only might be stabbed. It isn't required to happen only permitted. |
| |
| ▲ | marcosdumay 8 hours ago | parent | prev [-] | | Ok, I get this. The problem is that what you want is completely against the spirit of the entire language. If your point is that C++ should be more like C in general, I can agree with that. But if your point is that C++ should be literal on this specific case, performance be damned, and the rest of it is ok, then no, that's a bad one. | | |
| ▲ | JoshTriplett 8 hours ago | parent [-] | | I was utterly unconvinced that the original infinite-loop UB gave the compiler any important performance optimization, and I'm unconvinced that this is providing useful value to compensate for its surprise. If I wanted a yield in my infinite loop, I'd add one. | | |
| ▲ | mitxela an hour ago | parent [-] | | The original UB was to allow the compiler to merge two loops without proving termination. |
|
|
|
|
| ▲ | rcxdude an hour ago | parent | prev [-] |
| Any program in an OS only gets as much resources allocated to it as the OS allows (OK, in any general-purpose OS written in the past few decades). sched_yield() doesn't actually reduce that allocation in most cases, anyhow: in fact it has a higher chance of increasing the resources that the thread uses spinning in a loop because it's gonna be thrashing the scheduler as well. |