phobos dependencies

H. S. Teoh hsteoh at quickfur.ath.cx
Fri Dec 20 11:32:20 PST 2013


On Fri, Dec 20, 2013 at 02:20:12PM -0500, Michel Fortin wrote:
> On 2013-12-20 17:27:55 +0000, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> said:
> 
> >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".
> >
> >This would simplify quite a lot of two-liners into one-liners in
> >other places, too.
> 
> How do you solve the problem that in D you can't tell the module
> name from a fully qualified names? For instance:
> 
> 	import.std.something.somethingelse.anotherthing = 1;
> 
> Is the module std? std.something? std.something.somethingelse? It
> could be any of these answers.
[...]

Using captaindet's idea of lazy imports, we could solve this problem:

	// Tell compiler that 'std.range' is a module, but don't import
	// it just yet.
	lazy import std.range;

	void func() {
		// Since the compiler already knows that 'std.range' is
		// a module, it knows to now import std.range and look
		// up 'InputRange.front' in it.
		auto x = std.range.InputRange.front;
	}


T

-- 
EMACS = Extremely Massive And Cumbersome System


More information about the Digitalmars-d mailing list