Making AssertError a singleton
Shachar Shemesh via Digitalmars-d
digitalmars-d at puremagic.com
Mon Dec 12 22:23:58 PST 2016
On 12/12/16 23:02, Andrei Alexandrescu wrote:
> On 12/12/2016 02:54 PM, Shachar Shemesh wrote:
>> On 12/12/16 17:51, Andrei Alexandrescu wrote:
>>> Here it is:
>>>
>>> https://github.com/dlang/druntime/pull/1710
>>>
>>> It relieves code that uses assert from needing the GC. I think all
>>> Errors should be singletons - multiple objects in that hierarchy
>>> arguably make no sense. But of course there are many situations out
>>> there. If this breaks your code, please holler.
>>>
>>>
>>> Andrei
>>
>> As you may know, Weka has a huge GC aversion. Despite that fact, I fail
>> to see the improvement such a change would bring.
>
> Why am I not surprised :o).
I'm not sure what to make of that comment.
>
>> The only situation
>> under which using the GC is not harmful is when the entire process is
>> about to go kaboom anyways.
>
> You get to use assert without needing to link in the GC.
>
int func(int num1, int num2, int num3)
body
{
int result;
scope(exit)
assert(result>20);
assert(num1>5);
result += num1;
assert(num2>10);
result += num2;
assert(num3>5);
result += num3;
// Some more work
return result;
}
Yes, I know, there multiple ways in which this function can be written
much better, and in all of them the double assert won't happen. Such a
case may actually happen, however, particularly if the first assert to
happen happens in a sub-function.
What is supposed to happen, after your proposed change, if I call
"func(1, 2, 3)"?
Shachar
More information about the Digitalmars-d
mailing list