How do you debug @safe @nogc code? Can't figure out how to print.

aliak something at something.com
Sat Nov 17 13:13:36 UTC 2018


On Friday, 16 November 2018 at 13:21:39 UTC, Stanislav Blinov 
wrote:
> At 'point 1', you just take by value. If `t` ends up being a 
> closure, D will allocate. That's where it breaks the @nogc. 
> Solution:
>
> auto assumeNoGC(T)(return scope T t) { /* ... */ }
>
> Now you take (and return) a `scope` t, in that case when `t` is 
> a closure D won't allocate it on the GC heap.
>
> At 'point 2' you make an un- at safe cast, that's where it breaks 
> @safe. Given that the whole deal is just a debugging hack, you 
> could mark the whole function @trusted:
>
> auto assumeNoGC(T)(return scope T t) @trusted { /* ... */ }

Sawweet! Thanks, that made the printing possible!

"scope" is const from what I understand right? It works without 
scope as well. So just "return T".

Cheers,
- Ali


More information about the Digitalmars-d-learn mailing list