> I talked about that, for two evaluations `A` and `B`, whether the control flow executes `A` at a point in time that is no later than when it executes `B` is a valid semantics in the abstract machine?
I have already answered this.
From: jim x <xmh970252187@gmail.com>
Sent: Friday, June 12, 2026 08:17
To: Tiago Freire <tmiguelf@hotmail.com>
Cc: std-discussion@lists.isocpp.org
Subject: Re: [std-discussion] Does the C++ abstract machine recognize a temporal order of execution?
But there’s nothing else to debate here. We already explained what behavior you can expect with this.
However, the question in my OP is not about observable behavior. I talked about that, for two evaluations `A` and `B`, whether the control flow executes `A` at a point in time that is no later than when it executes `B` is a valid semantics
in the abstract machine? Of course, a real implementation doesn't need to emulate the semantics of the abstract machine.
On Fri, Jun 12, 2026 at 2:09 PM Tiago Freire <tmiguelf@hotmail.com> wrote:
> The OP is talking about the semantics and structure in the abstract machine, not only the observable behavior. A possible observable behavior is justified as valid since we infer that from the semantics and structure in the abstract machine. So, talking about whether this is a valid semantics in the abstract machine is necessary.
You already got your answer! That is the answer to what the “abstract machine” is expected to do. What else do you want?
The concept of the “abstract machine” is only about how the code should be interpreted, it is not an emulator that you should create, and it does not define everything.
The “abstract machine” allows for unspecified behavior; but code must run on real machines and on real machines something must always happen.
On some devices the result of the load will always going to be 1, on others it sometimes is going to be 0.
And the “abstract machine” is not going to tell you which one is right, it just shrugs its shoulders and says “yes”. Because different systems do different things, and this is allowed. And this is especially the case for multi-threaded systems.
You can call it an “incomplete non-deterministic abstract machine” if you want to be more exact.
But there’s nothing else to debate here. We already explained what behavior you can expect with this.
All of your questions have been answered.
If you still think that there is still an open question, there’s nothing I can do to help you. My capacity for explaining things is limited and I can’t make it understand it on your behalf.
From: jim x <xmh970252187@gmail.com>
Sent: Friday, June 12, 2026 04:45
To: Tiago Freire <tmiguelf@hotmail.com>
Cc: std-discussion@lists.isocpp.org
Subject: Re: [std-discussion] Does the C++ abstract machine recognize a temporal order of execution?
In your OP example if you find that 'now1 < now2', the result of the atomic load being 0 is a valid outcome.
Yeah, I keep agreeing that this is a valid possible execution in the abstract machine.
I believe you got lost in nuances of distinctions without a difference.
The OP is talking about the semantics and structure in the abstract machine, not only the observable behavior. A possible observable behavior is justified as valid since we infer that from the semantics and structure in the abstract machine.
So, talking about whether this is a valid semantics in the abstract machine is necessary.
On Thu, Jun 11, 2026 at 6:33 PM Tiago Freire <tmiguelf@hotmail.com> wrote:
I keep repeating and I don't think you understand what we are saying.
In your OP example if you find that 'now1 < now2', the result of the atomic load being 0 is a valid outcome.
I believe you got lost in nuances of distinctions without a difference.
Discussing anything else is pointless regardless of whatever it is you hope to practically achieve with this question.