On Thursday, 12 September 2013 at 19:41:49 UTC, bearophile wrote:
Daniel Davidson:

I am using Dart for code generation but would like to consider D if I can find a convenient replacement for the following declarative style:

Replacing Dart with D seems quite strange, such two languages have so much different usage niches.


   var dateRange = struct('date_range')
     ..doc = 'Basic pair of start and end dates'
     ..unitTest = true
     ..publicSection = true
     ..members = [
       member('start_date')
       ..type = 'Date',
       member('end_date')
       ..type = 'Date',
     ];

A similar syntax is not allowed in D, but there are two things that help for this: the C-style initialization of structs, that support field names too, and the with(){} statement.

Bye,
bearophile

The problem with with is the name can not hide each other, so it is easy to get into trouble. With C-style initialization I don't think you can use as expression - I think you need an lvalue for each and this hurts nesting.

I have a style I'm playing with and if anyone has comments or improvements (i.e. make more succinct/readable) it would be appreciated.

Here is a sample and the source for this and comparable Dart are in the links.

    auto d = make((ref Dossier _) {
      _.family = [
       "father" : make((ref Person _) {
           _.birthDate = "2001/1/1";
           _.deathDate = "2101/1/1";
           _.retirementDate = "2100/1/1"; }),
       "mother" : make((ref Person _) {
           _.birthDate = "2005/1/1";
           _.deathDate = "2125/1/1";
           _.retirementDate = "2100/1/1"; }),
       ];
      _.assets = [
       "house" : make((ref Asset _) {
           _.name = "Home on the Hill";
           _.unitValue = 120_000; }),
       "car" : make((ref Asset _) {
           _.name = "Dodge Dart";
           _.unitValue = 500; })
      ];
    });

http://pastebin.com/iLVL20Bz
http://pastebin.com/mLcWDACm

Thanks
Dan

Reply via email to