On 5/11/22 11:27, templatedperson wrote:

> I don't know if this counts as a feature, but reading the standard
> library documentation was especially difficult. There are a ton of
> `auto`s everywhere and function signatures are hard to read because of
> that. I got used to confusing function signatures in a week or two, but
> it made me consider not using D.

I agree with readability problems. And although you likely know why there are 'auto's everywhere in the standard library, I want to touch on that for others who may not know.

Although templates are great, they bring naming problems:

- Some names are overly complex and expose implementation details.

- Some names are unmentionable because the implementation chose to make the return type a nested struct.

import std.range;
import std.algorithm;

struct MyStruct {
}

void main() {
  auto arr = [ MyStruct() ];
  auto r = arr.map!(o => o).cycle;
  pragma(msg, typeof(r));
}

The type of the range object 'r' happens to be the scary

  Cycle!(MapResult!(__lambda2, MyStruct[])).

But make a change e.g. by adding .enumerate to the expression

  auto r = arr.map!(o => o).enumerate.cycle;

and now the type is very different (and deceptively simpler!):

  Cycle!(Result)

So, there is nothing else to do in current D but to have 'auto' return types.

Ali

Reply via email to