Comparing Exceptions and Errors

kdevel kdevel at vogtner.de
Sun Jun 5 18:03:16 UTC 2022


On Sunday, 5 June 2022 at 17:04:49 UTC, Ali Çehreli wrote:
> On 6/5/22 08:07, kdevel wrote:
[...]
> Like many other programmers who include me, Sean Parent may be 
> right.[1]
>
> Other than being a trivial example to make a point, the code 
> I've shown may be taking advantage of the "structure of array" 
> optimization.

"Premature optimization is ..."

[...]
> > struct T {
> >     int a;
> >     int b;
> > }
> >
> > struct S {
> >     T [] t;
> >
> >    void add(int i) {
> >      t ~= T (i, i * 10);
> >    }
> >
> >    void foo() {
> >                  // Look Ma no assert!
>
> The assert may have been moved to another place:

It's not "the" assert but another one. Nonetheless I take up the 
challenge:

> struct T {
>     int a;
>     int b;
>
>   invariant() {
>     // Look Pa it's still here!
>     assert(b == a * 10);
>   }
> }

struct T {
     int i;
     this (int i)
     {
         this.i = i;
         import std.checkedint;
         Checked!(int, Throw) (i) * 10;
     }
     int a () const { return i; }
     int b () const { return i * 10; }
}
struct S {
     const (T) [] t;
     void add(int i) {    // <-- Both arrays always same size
        t ~= T (i);
     }
     void foo() {
        // ...
     }
}

void main() {
   auto s = S();
   s.add(42);
   s.foo();
//  s.a ~= 1; // does not compile
//  s.t[0].b = 3; // no compile either
//  s.t[0].i = 7; // cannot change i, does not compile
   s.add (2^^27); // fine
//  s.add (2^^28); // throws Overflow on binary operator, fine
   s.foo();
}

> Ali

[...]

I'll try to not bring up his name again ;-)




More information about the Digitalmars-d-learn mailing list