designated initializer

Designated initializers are a syntax that allows for initializing an aggregate by naming its fields explicitly:
```
  struct Point {
    float x = 0.0;
    float y = 0.0;
    float z = 0.0;
  };

  Point p = {
    .x = 1.0,
    .y = 2.0,
    // z will be 0.0
  };
```
The explicitly listed fields will be initialized as specified, and others will be initialized in the same way they would be in a traditional aggregate initialization expression like Point{1.0, 2.0}.  It requires that the designated initializers appear in the same order as the fields appear in the struct definition. So in the example above, it is legal to initialize x and then z, but not y and then x.