module hijacking

Steven Schveighoffer schveiguy at yahoo.com
Mon Nov 2 05:03:11 PST 2009


On Sun, 01 Nov 2009 01:28:56 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> I ran the following experiment:
>
> mkdir deleteme
> cd deleteme
> mkdir std
> touch std/algorithm.d
> echo 'import std.algorithm; void main(){int a, b;swap(a,b);}' >main.d
> dmd main
>
> The attempt to compile main fails with "undefined identifier swap",  
> which means that the module I defined in the current directory  
> successfully hijacked the one in the standard library.
>
> The usual D spirit is that a symbol is searched exhaustively, and  
> attempts at hijacking are denounced. In the module cases, it turns out  
> that an entire module can successfully hijack another.
>
> Walter and I are ambivalent about this. There has been no bug report so  
> it seems like people didn't have a problem with things working as they  
> are. But maybe they never hijacked, or maybe some did hijack.
>
> Question: should we change this?

No.  This is completely the opposite of hijacking.  I would consider it  
hijacking if I had a project with a blah/file.d and the standard library  
added a blah/file.d that overrode *my* file.

-Steve



More information about the Digitalmars-d mailing list