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