Nel capitolo 23 di "Object Oriented Software Construction" (1988), Betrand Meyer distingue tra effetti collaterali, effetti collaterali concreti ed effetti collaterali astratti.
Meyer definisce un effetto collaterale nella seguente citazione:
A change performed by a function is known as a side effect to indicate that it is ancillary to the function’s official purpose of answering a query."
E definisce un effetto collaterale concreto in una finestra di definizione come:
A function produces a concrete side effect if its body contains any of the following: an assignment, assignment attempt or creation instruction whose target is an attribute, or a procedure call.
Questa distinzione per me è difficile da capire, dal momento che non riesco a pensare ad un esempio di funzioni che producono effetti collaterali ma che non producono effetti collaterali concreti. Meyer non ce ne dà neanche uno.
Meyer avrebbe detto che effetto collaterale e effetto collaterale concreto sono sinonimi? Oppure esiste una classe di effetti collaterali che non sono effetti collaterali concreti?
(Nota, la risposta non è effetti collaterali astratti, poiché gli effetti collaterali astratti sono essi stessi concreti effetti collaterali.)