On Saturday, 18 May 2013 at 20:39:29 UTC, Walter Bright wrote:
On 5/18/2013 1:22 PM, deadalnix wrote:
Many are, but I think that isn't the point we are discussing here.

Removing all holes in @disable this will require the same sacrifices at the ends than default constructor would. For isntance, what should happen in this case :

S[] ss;
ss.length = 42;

if S has @disable this ?

Already reported:

http://d.puremagic.com/issues/show_bug.cgi?id=10115

New case, will report it:

struct S
{
   int a;
   @disable this();
   this(int) { a = 1; }
   ~this() { assert(a !is 0); }
   alias a this;
   int opCall() { return a; }
}

void main()
{
   switch (S.init())
   {
      case 0:
         assert(0); //oops
      default:
   }
}

By the way, here is another bug.

I think there is disagreement about @disable reliability and usefulness and similar issues (@safe reliability too) due to different attitude to the problem: - As a language designer I care about whether some feature is claimed to solve some problem - and that all, I put it on a slide as lang advantage; - As a programmer who writes medium importance code I care whether the feature stops me from making bugs unintentionally. If it does, than I consider that the feature works. - As a programmer who writes critical code I care whether feature prevents from problem, even made deliberately, and if it doesn't, than the feature isn't reliable. It doesn't mean that it is totally useless, but it does mean that its reliability commitments are cheap.

Since in system language there is plenty of ways to deliberately pass invalid data to the place where some validity assumptions were made, @disable is a broken feature.

Reply via email to