On Wednesday, 16 August 2017 at 18:38:23 UTC, Johnson Jones wrote:

Not really, I'm not doing selective imports.
[snip]

I'll preface this by saying that I think Jesse Phillips' point is a good one. The fact that you can already do it with the language (as you note about having a separate file full of imports) suggests that it doesn't have much chance of being part of the language.

Moving on to your point about wildcards, isn't that what package.d is for? I agree with the others that a lot of the pain would be reduced gtkd had package.d files set up.

Nevertheless, you also seem to want to be able to import a limited number of modules of a package and rename them one thing. Here's an example that I think illustrates your point with phobos:

import foo = std.algorithm.searching, std.algorithm.comparison;

void main()
{
    int[] a = [ 1, 2, 4, 3, 2, 5, 3, 2, 4 ];
    auto val = foo.count(a, 2);

    auto result = cmp("abc", "abc");
}

In this, you can have count named with foo, but you can't name cmp with foo. Of course, this isn't a problem with selective imports if there is a package.d file.

I found some interesting stuff on bugzilla related to this stuff
https://issues.dlang.org/show_bug.cgi?id=3603
https://issues.dlang.org/show_bug.cgi?id=12359

The first one has a recommendation to allow something like (and actually the initial suggestion has a version quite similar to yours):
import std.algorithm : searching, comparison;
which is currently not allowed, and would require some changes to how imports work to get it included in the language. However, it is very similar to what you are looking for (why I was so focused on selective imports), except that it does not have renaming, so you'd prefer something like
import foo = std.algorithm : searching, comparison;

The most significant difference between this and what you are suggesting is that your approach is probably more general. You could put anything between the { }, whereas this approach is a bit more limited.

It might the things a little easier to distinguish between a module import and a symbol import (like import std.algorithm :: searching, comparison : count, cmp; instead).

Reply via email to