DMD 1.005 release

Yauheni Akhotnikau eao197 at intervale.ru
Wed Feb 7 11:49:23 PST 2007


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



More information about the Digitalmars-d-announce mailing list