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