DMD 1.005 release

Kyle Furlong kylefurlong at gmail.com
Wed Feb 7 02:17:48 PST 2007


Yauheni Akhotnikau wrote:
> On Wed, 07 Feb 2007 06:20:51 +0300, Walter Bright 
> <newshound at digitalmars.com> wrote:
> 
>> What it's for is to:
>>
>> 1) import data for a string constant
>> 2) import code that's in DSL (Domain Specific Language), not D, form.
> 
> Can you provide some examples of DSL the new D feature is intended for?
> 
> For example, what if I want to implement something like to RubyOnRails 
> ActiveRecord DSL 
> (http://api.rubyonrails.org/files/vendor/rails/activerecord/README.html)? 
> This is an ordinal Ruby code:
> 
>   class Account < ActiveRecord::Base
>     validates_presence_of     :subdomain, :name, :email_address, :password
>     validates_uniqueness_of   :subdomain
>     validates_acceptance_of   :terms_of_service, :on => :create
>     validates_confirmation_of :password, :email_address, :on => :create
>   end
> 
> I may wish to translate it in the following D fragment (with an 
> exception that in D I must explicitly describe all table fields):
> 
>  mixin( DActiveRecord!(
>  `class Account
>     field subdomain varchar(20)
>     field name varchar(100)
>     field email_address varchar(255)
>     field password varchar(32)
>     field term_of_service int
>     validates_presence_of subdomain, name, email_address, password
>     validates_uniqueness_of subdomain
>     validates_acceptance_of terms_of_service, on => create
>     validates_confirmation_of password, email_address, on => create
>   end` ) );
> 
> The template DActiveRecord must parse DSL string at compile time and 
> produce another string with Account class implementation in D. With all 
> necessary symantic analysis and constraints (for example, it is 
> impossible to use name of field in 'validate_presence_of' if it isn't 
> described as 'field').
> 
> Do you think this task can be done with D templates at complile time?
> 
> --Regards,
> Yauheni Akhotnikau

Almost certainly.



More information about the Digitalmars-d-announce mailing list