Questa è una semplice domanda terminologica relativa a un modello di progettazione del ciclo primitivo.
Alcuni costrutti di loop richiedono un priming read prima di entrare nel loop ... Mentre altri costrutti di loop richiedono una scrittura finale (o simili) dopo aver chiuso il ciclo ... Mi sembra che una "scrittura in coda" sia analoga al contrario di un innesco lettura.
Quindi qual è il termine corretto per tale pezzo di codice?
EDIT:
Ok guys, this is getting annoying. If you've never even heard the term "priming read" (or the like) in the first place, then don't suggest other random terminology that already has a well-established definition (e.g. "loop unrolling").
My question is whether there is a canonical (even if esoteric) term for this loop design pattern. Or if not, if there is a semi-widely-used but specific term for it. Things like "loop transformation" or "pre-loop" and "post-loop" are not specific enough to accurately differentiate this particular loop design pattern from more general loop patterns, resource acquisition / clean-up code, etc.
Esempio
Ecco lo snippet di codice C ++ (semplificato) che ha motivato la mia domanda:
auto structure = structures.begin(); // structures is of type vector<structure>
// "Priming read" for the loop
size_t prevID = structure->ID;
int aggregateDelta = structure->delta;
// The loop
while (++structure != structures.end()) {
if (structure->ID == prevID) {
aggregateDelta += structure->delta;
}
else {
reducedStructures.push_back({prevID, aggregateDelta});
prevID = structure->ID;
aggregateDelta = structure->delta;
}
}
// Opposite of a "priming read" for the loop
reducedStructures.push_back({prevID, aggregateDelta});
Chiarimento
Sulla base dei commenti, sembra esserci una certa confusione su cosa sia esattamente una "lettura di priming" e in che modo è diversa da altri concetti.
"Priming Read"
Dato un ciclo non strutturato, possiamo convertirlo in un ciclo strutturato spostando le prime dichiarazioni n
del corpo del ciclo alla fine del corpo del ciclo e duplicando tali istruzioni all'esterno del loop prima dell'espressione di loop test. Le istruzioni duplicate che ora si trovano prima dell'ingresso del ciclo sono quelle che vengono chiamate "priming read".
Unstructured Loop:
Structured Loop with "Priming Read":
Si noti che dato un ciclo non strutturato che ha istruzioni tra l'ingresso del ciclo e l'espressione del test del ciclo, se vogliamo farlo in un ciclo strutturato allora il "priming read" è necessario per la correttezza . Questo è ciò che lo rende diverso da una trasformazione di loop generalizzata (che sembra essere ciò che alcuni commentatori chiamano "loop unwroll").
Structured but Incorrect Loop without "Priming Read":
"Loop Unrolling"
Il movimento e la duplicazione del codice coinvolti nella conversione di un loop non strutturato in un loop strutturato con un "priming read" non costituiscono loop unwrolling , che si riferisce specificamente a una tecnica di ottimizzazione del compilatore che duplica tutto il codice nel corpo del loop al fine di migliorare il runtime riducendo l'overhead del controllo del loop. "Loop Unrolling" non ha nulla a che fare con la programmazione strutturata / non strutturata, e non è richiesta per la correttezza del loop.
Fully "Rolled" Loop Body:
"Unrolled" Loop Body by a factor of 4: