option -ignore_pure for temporary debugging (or how to wrap an unpure function inside a pure one)?

Seb seb at wilzba.ch
Thu Feb 8 03:44:40 UTC 2018


On Thursday, 8 February 2018 at 03:29:54 UTC, Timothee Cour wrote:
> while hacking into druntime and adding temporary debug 
> information (eg with custom logging etc) I had a hard time 
> making things compile because lots of functions are pure 
> nothrow safe, resulting in compile errors when my custom 
> debugging functions are not pure nothrow safe.
>
>
> How about adding flags ` -ignore_pure` (and perhaps 
> -ignore_safe -ignore_nothrow) to allow code to compile ignoring 
> safe, pure, nothrow mismatches?
>
> This would be meant for temporary debugging obviously, 
> production code would not enable these flags.
>
> my workaround for nothrow and safe attributes is to call via 
> wrapNothrow!fun:
>
> @trusted
> nothrow auto wrapNothrow(alias fun, T...)(T a){
>   import std.exception;
>   try{
>     return fun(a);
>   }
>   catch(Exception t){
>     assert(0, t.msg);
>   }
> }
>
> What would be a workaround to wrap a non-pure function?


This comes up every 2-3 months - we really need a better solution.

-> assumeNogc: 
https://forum.dlang.org/post/kvacxfalxqtoumatxtsx@forum.dlang.org


Other threads: 
https://forum.dlang.org/post/eiifgqvoimbtkgcwfiiy@forum.dlang.org

We really need better out-of-the-box solutions for this. There's 
debug, which already allows impure code in pure code.
It should be possible to use `debug` in same way for `@nogc`, 
`@safe` and `nothrow`.


More information about the Digitalmars-d mailing list