DMD 1.005 release
Kyle Furlong
kylefurlong at gmail.com
Wed Feb 7 15:29:52 PST 2007
Yauheni Akhotnikau wrote:
> On Wed, 07 Feb 2007 22:18:28 +0300, Walter Bright
> <newshound at digitalmars.com> wrote:
>
>> Yauheni Akhotnikau wrote:
>>> Do you think this task can be done with D templates at complile time?
>>
>> Yes, that's exactly the intent. If this can't be made to work, we'll
>> fix D so it can.
>
> May be I'm wrong, but I think that 'static if' and recursive templates
> (and other techniques available for metaprogramming at compile time) are
> not as powerful as ordinary D itself. So it is much more preferable to
> me to program such DSL as 'normal' D program. May be it is a good idea
> to make 'staged' compilation? For example DSL transformation code is
> written as ordinal D programm. Then that code compiled at first
> compilation stage, then it is invoked by compiler and the result is
> placed into input to the next stage.
>
> Something like that:
>
> // active_record.d
> // DActiveRecord implementation.
> module active_record;
>
> // DSL transformator.
> char[] DActiveRecord( char[] input ) { ... }
>
> ===
>
> // demo.d
> // DActiveRecord usage.
> module demo;
>
> import active_record;
>
> // Function DActiveRecord will be called at compile time.
> mixin( DActiveRecord( "class Account ... end" ) );
>
> ===
>
> Two points must be highlighted here:
> * code of DActiveRecord must be used only at complite time and threw out
> from the resulting application code;
> * multiple stages must be allowed: for example, DActiveRecord may depend
> on another DSL and so on.
>
> --Regards,
> Yauheni Akhotnikau
I agree with the point that metaprogramming needs more control structures.
static for, static foreach, static while, static do, static switch case,
etc.
More information about the Digitalmars-d-announce
mailing list