phobos dependencies

captaindet 2krnk at gmx.net
Fri Dec 20 11:17:29 PST 2013


On 2013-12-20 11:38, H. S. Teoh wrote:
> On Fri, Dec 20, 2013 at 09:27:55AM -0800, Andrei Alexandrescu wrote:
>> On 12/20/13 5:45 AM, Joseph Rushton Wakeling wrote:
>>> On 20/12/13 10:06, Meta wrote:
>>>      void topN(alias less = "a<  b",
>>>              SwapStrategy ss = SwapStrategy.unstable,
>>>              Range, RandomGen)(Range r, size_t nth, ref RandomGen rng)
>>>          if (isRandomAccessRange!(Range)&&  hasLength!Range
>>>              &&  isUniformRNG!RandomGen)  //<--- needs
>>> std.random.isUniformRNG
>>>      {
>>>          static assert(ss == SwapStrategy.unstable,
>>>                  "Stable topN not yet implemented");
>>>          while (r.length>  nth)
>>>          {
>>>              auto pivot = uniform(0, r.length, rng);
>>>              // ... etc. ...
>>>          }
>>>      }
>>
>> I had this idea fot a while, and Walter is favorable of it as well -
>> extend "import" for one-shot use. With that feature the example
>> would become:
>>
>>      void topN(alias less = "a<  b",
>>              SwapStrategy ss = SwapStrategy.unstable,
>>              Range, RandomGen)(Range r, size_t nth, ref RandomGen rng)
>>          if (isRandomAccessRange!(Range)&&  hasLength!Range
>>              &&  import.std.random.isUniformRNG!RandomGen)
>>      { ... }
>>
>> In this case "import" would syntactically be placed at the beginning
>> of a qualified name, meaning "import this module lazily and look up
>> the symbol in it".
> [...]
>
> Hmm. Why do we need to incorporate the 'import' keyword in the first
> place? What about extending symbol lookup, so that if a fully-qualified
> symbol x.y.z can't be found in the current symbol tables, and x/y exists
> in the current import path, then implicitly try to import x.y and lookup
> z in that module. Then you could just write:
>
> 	void f(T)(T t) if (std.range.isInputRange!T) ...
>
> and the compiler will automatically import std.range within that scope.
> Obviously, it's a bad idea to import std.range into module scope, since
> it would pollute the module namespace, but it seems a good idea to do a
> one-shot import automatically, since the qualified symbol itself already
> says which module the symbol is supposed to be defined in. There's no
> need to add another "import." prefix to it, IMO.
>
>
> T

one could make it a bit more explicit by requiring

	import std;

at module level, or even more explicit

	auto import std;

to enable lazy import of everything that is hierarchically below. could then be used for user libraries as well:

	import mybreadandbutter;		// has several sub folders / packages

/det



More information about the Digitalmars-d mailing list