Remix.run Logo
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.