Modifying user-defined attributes. UDA templates.

Jacob Carlborg doob at me.com
Mon Mar 17 06:23:54 PDT 2014


On Monday, 17 March 2014 at 09:17:33 UTC, Yuriy wrote:
> Hello, I'm new to D, so please excuse me if i'm wrong anywhere. 
> Ever since i've learned C++ and started practicing templates 
> metaprogramming (after reading Andrei's book) i wished there 
> was a language to be low-level as C++, productive as if 
> interpreted (e.g. Python), and expressive as... well... here 
> comes D! It's features are great, and specifically now i want 
> to talk about UDA. This feature is what i lacked in C++, but as 
> you know, appetite comes with eating, so i think there's still 
> room for improvement in UDAs.
>
> The problem is current UDAs can't modify definition they're 
> attached to. The solution is somewhere near Python's 
> decorators, but of course, using compile-time templates or 
> mixins.
>
> Here's an example:
>
> template MyAttr(string name, T)
> {
>
> }
>
> @MyAttr class MyClass
> {
>  ... class body
> }
>
> Which should evaluate to something like:
> class __MyClassTmpThatWillBeRemovedInCompileTime
> {
>  ... class body
> }
>
> mixin(MyAttr!("MyClass", 
> __MyClassTmpThatWillBeRemovedInCompileTime));
>
> Next, MyAttr can modify the class, rename it, ignore it (in 
> this case MyClass will not be available further), define 
> something else instead of it.
> I could try and modify dmd to support it at least as a 
> prototype, but before, i'd like to know whether such feature 
> was already considered and rejected. Thanx.

Seems you want something similar to AST macros [1].

[1] http://wiki.dlang.org/DIP50

--
/Jacob Carlborg


More information about the Digitalmars-d mailing list