Why is there no combination of popFront and front to pop? (aka Python `next`)

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Feb 18 14:38:08 PST 2016


On 02/18/2016 05:04 AM, Seb wrote:

 > However on the other side we learn the stack syntax with return at
 > university

You must have seen it in the context of reference types, no? There is no 
problem in languages that don't have value types. The problem is with 
the final copying of the value to the caller's context. If that 
operation throws, then the function is not strongly exception safe.

 > (it's even on wikipedia [2]) and thus I am a friend of such a
 > syntax:

 > [2] https://en.wikipedia.org/wiki/Stack_(abstract_data_type)

That Wikipedia article has no mention of "exception". Dismissed... :)

Exception safety involves "cohesion". That's the term Herb Sutter had 
used in the context of C++ exception safety. One of his guidelines:

"Prefer cohesion. Always endeavor to give each piece of code—each 
module, each class, each function—a single, well-defined responsibility."

The next() you are proposing is inferior to front() and popFront() 
because it mixes the two concerns: access and mutation.

I guess it would be acceptable if next() required that the copy 
operation on the elements were @nothrow. I think then it would be safe.

Ali



More information about the Digitalmars-d-learn mailing list