On Tuesday, February 14, 2017 09:37:39 Andrei Alexandrescu via Digitalmars-d 
wrote:
> On 02/14/2017 04:55 AM, Jacob Carlborg wrote:
> > The signatures we already have in Phobos is quite ridiculous
>
> How are they so, and what steps can we take to improve them. Could you
> please give a few examples on how to do things better? Thx! -- Andrei

Unfortunately, I'm not sure that there's much that we can do. Each of the
features that clutter up a function signature is useful and valuable in and
of itself, but when you add them all together, it can get pretty messy.
We've managed to improve some aspects over time, but there has to be a limit
to it. At some point, the information takes up however much space it takes
up.

Having auto functions helped considerably for cleaning up function
signatures where templates were involved. Declaring eponymous templates to
use as traits for commonly used idioms helps - and in some cases, maybe we
should add more of those for common combinations, but the best we could do
is clean up some common cases, because it ultimately doesn't scale well for
the reasons that you explained why C++ has had issue with getting concepts
into the standard. Having different defaults for function attributes would
help in some cases (e.g. have @safe and pure be the default), but I don't
see how we could do that at this point without breaking a bunch of code. And
attribute inference already takes care of the attributes on the most
cluttered functions, since those are going to be templated functions with
template constraints.

I think that things just reach a point where if you want the functionality,
you get a messy function signature, and you can't do much more than try and
format it nicely. For better or worse, it's just one of the costs of what D
provides.

That being said, at some point, you have to ask whether each added feature
is worth the cost when you consider how it's going to clutter up function
signatures even further. And while I do think that there is value in DIP
1005 and the proposed from template, I also think that it's taking it too
far. IMHO, it's just not worth marking functions even further - at least not
in most code. Maybe it's worth it in something like Phobos where everyone is
using it and benefiting from the compilation speed up, but Walter has been
wanting to implement lazy imports anyway, and that would fix the problem
without doing anything to any function signatures. It does lose the benefits
of tying the imports to the function, but personally, I don't think that
that's's worth the extra cost of further cluttering up the function
signature. As it is, I'm increasingly of the opinion that local and
selective imports aren't worth it. It's just so much nicer to able to slap
the required imports at the beginning of the module and forget about them
than having to worry about maintaining a list of selective imports or have
all of the extra import lines inside of all of the functions. And adding
imports to the function signatures is just making the whole local import
situation that much worse.

So, regardless of what happens with DIP 1005 or from, I'd very much like to
see lazy imports implemented, and I don't expect use DIP 1005 or from in
much code that I write.

- Jonathan M Davis

Reply via email to