Is this a bug in iota?
Somedude
lovelydear at mailmetrash.com
Thu Apr 19 03:53:38 PDT 2012
Le 19/04/2012 11:11, Jonathan M Davis a écrit :
> On Thursday, April 19, 2012 10:14:39 Somedude wrote:
>> Le 19/04/2012 10:07, Jonathan M Davis a écrit :
>>> Having an assertion may be desirable, but the bug is in the usage of iota,
>>> not iota itself. At best, the assertion would help indicate that the
>>> caller has a bug. It's exactly the same as doing something like
>>>
>>> for(size_t i = 3; cond; --i) {}
>>>
>>> It's basic integer arithmetic. If you subtract from the minimum value that
>>> the integral type will hold, then its value will wrap around to the
>>> maximum. So, while adding an assertion would be desirable, I don't see
>>> how this could be considered a bug in iota.
>>>
>>> - Jonathan M Davis
>>
>> I don't get it, for me iota has nothing to do with the problem, the
>> problem is in the implementation of popfront(), which should check
>> beforehand whether the range is empty, right ?
>
> Maybe, maybe not. popFront _must_ succeed. It has three options if the range
> is empty: assert, throw an exception, or just assume that it's going to
> succeed and choke in whatever manner the implementation ends up choking if the
> range is empty when it tries to pop an element from an empty range.
>
> Very few ranges are going to throw exceptions from popFront, because that
> incures overhead, and really, it's a bug in the caller if they keep trying to
> pop elements from an empty range. So, throwing an exception really isn't the
> correct behavior.
>
> Asserting is an option, and since iota is templated, it should probably do
> that (asserting in non-templated code is more debatable, because it'll only be
> there if Phobos itself is compiled without -release rather than the program or
> library call it - in most cases, such an assertion would probably never end up
> being run, because using a release version of Phobos is the default). But it's
> not doing that right now. An enhancement request for such would be
> appropriate.
>
Oh that's right. Still I think it should be done for development, and I
also think Phobos should ship in both versions, dev AND release.
We shouldn't link against the release phobos when we compile without
-release.
More information about the Digitalmars-d-learn
mailing list