Among the things I've listed about Archetype there's one interesting thing. 
Class instances aren't PODs, but sometimes I prefer reference semantics and to 
populate fields in a plain way, expecially for simple classes.

Time ago I and other people have suggested a syntax like (this also to avoid a 
class of bugs http://d.puremagic.com/issues/show_bug.cgi?id=3878 ):


class Foo {
  string x;
  int y = 1;
  this(this.x, this.y) {}
}
void main() {
  Foo f3 = new Foo("hello", 10);
}


A simpler solution are classes with automatic constructors:

class Foo {
  string x;
  int y = 1;
}
void main() {
  Foo f1 = new Foo(); // Good
  Foo f2 = new Foo("hello"); // Good
  Foo f3 = new Foo("hello", 10); // Good
}


What kind of problems are caused by this? :-)


Currently that syntax is supported for structs created as values, but not for 
structs created by pointer:

struct Foo {
  string x;
  int y = 1;
}
void main() {
  Foo* f1 = new Foo(); // OK
  Foo* f2 = new Foo("hello"); // Error: no constructor for Foo
  Foo* f3 = new Foo("hello", 10); // Error: no constructor for Foo
}

Bye,
bearophile

Reply via email to