How about Go's... error on unused imports?

Nick Sabalausky a at a.a
Fri Nov 13 14:19:47 PST 2009


"Nick Sabalausky" <a at a.a> wrote in message 
news:hdklbg$2p2f$1 at digitalmars.com...
> "bearophile" <bearophileHUGS at lycos.com> wrote in message 
> news:hdkavm$1b0k$1 at digitalmars.com...
>> Clay Smith:
>>
>>>I would like my all.d files to not give errors :o<
>>
>> "all.d" files are a hack used to patch one of the minor holes of the 
>> current D module system. The right way to do that is with a syntax like 
>> (that must not import the 'foo' name too in the current namespace, only 
>> the names inside "std.foo"):
>>
>> import std.foo: *;
>>
>> Every part of a language needs to be designed with care. Approximate 
>> designs with several holes aren't enough.
>>
>
> I used to think so, but I'm not so sure anymore. In my Goldie project, one 
> of the modules ("goldie.file") is something with a whole lot of types and 
> details about loading a .cgt file. In the vast majority of use-cases, the 
> Goldie library user has no reason to use any of those directly, so as 
> useful as "goldie.all" is, it would be pointless for me to include that 
> "goldie.file" in "goldie.all", which is exactly what "goldie.*" would do 
> automatically if it existed. Now, certainly, I could just mark everything 
> in "goldie.file" as private, but I do want people to be able to import and 
> use it directly if they want to (Ex, if they want to use Goldie as a 
> springboard for their own .cgt-file handling routines).
>
> Plus, I'll often have renamed and deliberately unused source files in the 
> same directory as "real" modules, and I wouldn't want them automatically 
> grabbed by ".*". I suppose I could change their extension, but then the 
> editor would get confused, and I'd have to work around that, etc...

Another Goldie-derived example of ".all" being more useful than ".*": I'm 
building a tool that generates a statically-compiled and linked D source 
version of a grammar (normally they're loaded at runtime from a file). 
Unless I change my mind, I intend for these to be used with "import somelang 
= myapp.staticlangs.somelang.all", so that multiple static langauges can be 
used together (Ie, "d.Token", "haxe.Token", "js.Token", whatever). I 
originally had the generation tool give unique names to each type (Ie, 
"Token_haxe", "Token_js", etc), but I'm thinking now the renamed import 
approach is probably more appropriate and less hack-ish, and comes with more 
built-in flexibility.

But anyway, suppose someone has a project with multiple languages like this 
(ex "myapp.staticlangs.haxe.all" and "myapp.staticlangs.js.all", and maybe a 
couple others). If they tried an "import myapp.staticlangs.*" approach, that 
just wouldn't work, because they're designed to be used as renamed imports. 
But they could easily create a "myapp.staticlangs.all" (or hell, I could 
even generate one) that would automatically do the correct renamed imports. 
Anyway, just another thing that ".*" importing can't really handle.





More information about the Digitalmars-d mailing list