UDA for module declaration.

Orvid King via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 16 18:43:58 PDT 2014


On Wednesday, 17 September 2014 at 00:46:07 UTC, IgorStepanov 
wrote:
> Why not subj?
> D allows annotate with UDA the most of named symbols.
> There are three category of named symbols, which cannot be 
> annotated: module declarations, function arguments and enum 
> members.
> Enum members are trivial symbols and annotation possibility for 
> them probably does not make sense.
> However, annotation unpossibility for module declaration and 
> function arguments looks strange.
>
> Why all this talk?
> I've created pull request for dmd, which allows UDA for modules 
> (https://github.com/D-Programming-Language/dmd/pull/3947) and 
> Walter says that I should open topic in n.g. and justify the 
> usefulness of this enhancement.
>
> I will give a few examples when UDA can be used for modules and 
> arguments:
>
> First example: in ORM framework, like hibernate, I want to add 
> posibility to put the module in correspondence to DB scheme:
>
> @Sheme("STOCK") module Stock;
>
> @Entity("WAYBILLS") class Waybill //STOCK.WAYBILLS
> {
> ....
> }
>
> @Entity("ITEMS") class Item //STOCK.ITEMS
> {
> ....
> }
>
> ***************************************************
> The second example is a Web MVC framework
>
> @BindModule("forum") module dlang.engine.controllers.forum;
>
> @BindPath("/")
> class MainController : AbstractController!(MainController)
> {
>     @BindMethod("/newpost")
>     View newPost(Request req,
>                  @BindParam("tid") int threadID,
>                  @BindParam("author") string author,
>                  @BindParam("subj")   string subject,
>                  @BindParam("msg")    string message)
>     {
>         ///
>         return new TemplateView(model, 
> "/dlang/templates/forum/newpost.tmpl");
>     }
> }
>
> ***************************************************
> The third example is a my runtime reflection implementation:
>
> I've created generator which walking down the scope symbol, and 
> store runtime data, if symbol is annotated with a special UDA.
> For example, if class Annotated with @reflect!all, generator 
> will save information about all class members into special 
> place. However, if local scope symbol is not annotated, 
> information about its members will not saved:
>
> @reflect!all class Foo
> {
>    int a;
>    class Bar
>    {
>       int b;
>    }
> }
> In this example, information for Foo will be saved (that Foo 
> contains "a" and class "Bar"), but information about Bar 
> members will not be saved.
> Thus I want to be able to annotate module that the generator 
> will keep information about its members.
>
> Destroy.

UDA's for enum members do make sense, especially in the case of 
serialization, where you might want a member to be used in your 
code as one thing, but parsed as a different name, for instance, 
serializing code where the enum member would be a keyword in D.


More information about the Digitalmars-d mailing list