DIP10005: Dependency-Carrying Declarations is now available for community feedback
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Wed Dec 14 11:36:02 PST 2016
On 12/14/2016 02:22 PM, Timothee Cour via Digitalmars-d wrote:
> What about simply this:
>
>
> ```
> module foo;
>
> {
> import std.stdio;
> void fun(File foo){}
> }
>
> {
> import sd.range;
> void foo(T) if(isInputRange!T){}
> }
>
> ```
Walter proposed this as well. We found two problems with it: (a) it is
not clear that the import is effected only if the name is looked up; (b)
the common case is one import clause for one declaration, which makes
the code awkward. Either you have an indirection level to start with:
{
import std.range;
void foo(T) if(isInputRange!T)
{
... one extra indent already ...
}
}
or the horror of C++ namespaces:
{import std.range;
void foo(T) if(isInputRange!T)
{
...
}
}
The fact that C++ namespaces introduce scopes has been an unpleasant
mistake. Virtually all coding standards I've seen make
namespace-introduced scopes special in that they don't participate in
the usual indentation rules. Even special emacs and vi rules have been
devised for that. Something we can learn from.
Andrei
More information about the Digitalmars-d
mailing list