Das Folgende spezifiziert das beobachtbare Verhalten des Programms:
[*]Zugriffe über flüchtige GL-Werte werden streng nach den Regeln der abstrakten Maschine ausgewertet.
Daten werden an die Host-Umgebung geliefert, um in Dateien geschrieben zu werden (siehe auch: ISO/IEC 9899:2024, 7.23.3) wird nicht als beobachtbares Verhalten angesehen.
Betrachten Sie dieses Beispiel:
Code: Select all
int main(){
auto t = network_request(); // #1
}
Das Lesen eines durch einen flüchtigen glvalue ([basic.lval]) bezeichneten Objekts, das Ändern eines Objekts, das Erstellen einer injizierten Deklaration ([expr.const]), das Aufrufen einer Bibliotheks-E/A-Funktion oder das Aufrufen einer Funktion, die eine dieser Operationen ausführt, sind alles Nebenwirkungen
Nebenwirkungen sind jedoch kein beobachtbares Verhalten, da sie nicht in der Liste enthalten sind. Bedeutet das also, dass eine konforme Implementierung den Aufruf von network_request gemäß der „als-ob“-Regel eliminieren kann? Das heißt, das gesamte Programm ist ein No-Op, da Aufrufe von E/A-Funktionen, die nicht die in [intro.abstract] p8 aufgeführten Dinge betreffen, kein beobachtbares Verhalten sind und die konforme Implementierung die Struktur nicht gemäß der „Als-ob“-Regel emulieren muss:
Die semantischen Beschreibungen in diesem Dokument definieren eine parametrisierte nichtdeterministische abstrakte Maschine. Dieses Dokument stellt keine Anforderungen an die Struktur konformer Implementierungen. Insbesondere müssen sie nicht kopiert oder kopiert werden emulieren die Struktur der abstrakten Maschine. Vielmehr sind konforme Implementierungen erforderlich, um (nur) das beobachtbare Verhalten der abstrakten Maschine zu emulieren, wie unten erläutert.
Mobile version