DIP16: Transparently substitute module with package

Steven Schveighoffer schveiguy at yahoo.com
Thu Apr 5 07:55:42 PDT 2012


On Fri, 30 Mar 2012 10:46:19 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> Starting a new thread from one in announce:
>
> http://prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP16
>
> Please comment, after which Walter will approve. Walter's approval means  
> that he would approve a pull request implementing DIP16 (subject to  
> regular correctness checks).
>
>
> Destroy!

BTW, this case makes the part of DIP16 which wants to shortcut fully  
qualified names invalid, or at least costly (I posted this code in another  
part of the thread, but I thought I'd bring it up higher).

The following is valid code today:

a/b.d:

module a.b;

void foo() {}
struct b
{
    static void foo() {}
}

main.d:
import a.b;

void main()
{
    a.b.foo();
}

If DIP16 were to be implemented, this becomes ambiguous.  Is a.b.foo() the  
module function foo() from a.b, or is it a shortcut for a.b.b.foo()?

The main issue is, because you can shortcut the FQN, and a chain of  
identifiers can have repeated identifiers in them, ambiguity is possible.

Michel Fortin pointed out at least three cases of this in phobos (although  
I can't see how they could be ambiguous, he has a good point).

-Steve


More information about the Digitalmars-d mailing list