assert(false) and GC

russhy russhy at gmail.com
Sat Jul 10 01:38:06 UTC 2021


On Saturday, 10 July 2021 at 01:23:26 UTC, Steven Schveighoffer 
wrote:
> On 7/9/21 8:44 PM, russhy wrote:
>> On Friday, 9 July 2021 at 23:34:25 UTC, Ali Çehreli wrote:
>>> On 7/9/21 4:12 PM, russhy wrote:
>>>
>>> >> One way of forcing compile-time evaluation in D is to 
>>> >> define
>>> an enum
>>> >> (which means "manifest constant" in that use).
>>>
>>> That's all I meant. It was a general comment.
>>>
>>> > this is very bad, assert are good because they are one 
>>> > liner,
>>> making it
>>> > 2 line to avoid GC is just poor design, compiler should be
>>> smarter
>>>
>>> There must be a misunderstanding. The one-liner does not 
>>> allocate either (or @nogc is broken).
>>>
>> 
>> https://run.dlang.io/is/HJVSo0
>> 
>> it allocates
>
> That test is possibly showing the wrong thing. You are 
> capturing all allocations, not just the concatenation.
>
> Change the assert line to:
>
> ```d
> string s = __FUNCTION__ ~ "This is an error message";
> ```
>
> And no GC allocations occur. Even without optimizations turned 
> on.
>
> I think it's the throwing/catching of the `Throwable` that is 
> allocating. But I don't know from where the allocation happens.
>
> -Steve

i think you are right


More information about the Digitalmars-d-learn mailing list