DIP78 - macros without syntax extensions

Kagamin via Digitalmars-d digitalmars-d at puremagic.com
Thu May 28 01:14:14 PDT 2015


On Wednesday, 27 May 2015 at 17:03:30 UTC, Artur Skawina wrote:
> That already works. Eg:
>
>    alias deduceType(Args...) = typeof({
>       // some complex imperative code to deduce the type from 
> the args
>       import std.range;
>       return 
> mixin(iota(Args.length).map!q{`Args[`~text(a)~']'}().join("+"));
>    }());
>
>    struct Foo(T...) {
>       deduceType!(T) value;
>    }
>
>    static assert(is(typeof(Foo!(short, ubyte, 
> bool).value)==int));
>
>
> What all these proposals seem to be about is:
>
> a) better introspection (ie exposing a (preferably simplified 
> and std) AST)
> b) AST injection
> c) "better" syntax
> d) better "optimizations", meaning skipping the emission of 
> code and data
>      that is never used at runtime.
>
> artur

Maybe extending capabilities of templates would be a better 
direction. They already accept aliases which are essentially 
simple hygienic identifier expressions.


More information about the Digitalmars-d mailing list