pure and custom new / delete

David Nadlinger see at klickverbot.at
Tue Jun 26 12:54:43 PDT 2012


On Tuesday, 26 June 2012 at 18:35:31 UTC, Jonathan M Davis wrote:
> You could try std.traits.SetFunctionAttributes (it was recently 
> added and is
> not in 2.59 IIRC). David Nadlinger created it specifically for 
> being able to
> create easily add function attributes such as pure to a 
> function. I haven't
> messed around with it yet, but it looks very easy to use.

I created it specifically for a related use case, but on its own, 
SetFunctionAttributes is strictly for manipulating 
function/delegate _types_ in terms of linkage. This is helpful 
because the D grammar for function types is quite clumsy.

For example, the following is not valid D code, and can't 
trivially be corrected (in the first case, creating a separate 
alias for the function type would work, but that's clumsy 
especially in generic and/or generated code):

---
void foo(extern(C) void function() nothrow cb);
auto assumePure(T)(T t) { return cast(pure T)(t); }
---

As mentioned in 
https://github.com/D-Programming-Language/phobos/pull/555, it 
would be easy to add »high-level primitives« on top of 
SetFunctionAttributes; assumePure and ExternC templates are 
included as examples its the documentation. Specifically for 
declaring »trusted pure« functions, making »alias 
assumePure!funcImpl func;« work would not be hard either.

I just was not sure which of those tools are needed frequently 
enough to warrant inclusion in Phobos, if any.

David


More information about the Digitalmars-d mailing list