phobos dependencies

monarch_dodra monarchdodra at gmail.com
Tue Jan 7 03:25:00 PST 2014


On Monday, 6 January 2014 at 07:02:03 UTC, Andrei Alexandrescu 
wrote:
> On 1/5/14 10:31 PM, Walter Bright wrote:
>> On 1/5/2014 9:22 PM, Andrei Alexandrescu wrote:
>>> On 1/5/14 8:44 PM, Kenji Hara wrote:
>>>> Honestly, "lazy import" (== defer loading module file and 
>>>> running
>>>> semantic analysis for symbol search) would improve 
>>>> compilation speed for
>>>> selective imports and static imports, but it would have no 
>>>> merit for
>>>> basic imports.
>>>>
>>>> So precisely, "all imports lazy would be a net large win." 
>>>> is not
>>>> correct.
>>>
>>> Consider:
>>>
>>> import std.stdio;
>>> void main() { writeln("Hello, world!"); }
>>>
>>> Currently std.stdio and all modules transitively imported by 
>>> it would
>>> be opened.
>>>
>>> With lazy imports, std.stdio gets opened and then writeln() 
>>> gets
>>> semantically
>>> analyzed. Only modules required by writeln() itself will 
>>> actually be
>>> opened. Big
>>> difference.
>>
>> import bar;
>> import foo;
>>
>> Importing foo can never be done lazily if there are unqualified
>> references to symbols in bar.
>
> Yah, but modules transitively imported in foo and bar need not 
> be loaded eagerly. That's where the win comes from. Took me a 
> while to figure.
>
> Andrei

Right, but this fails quite quickly. Consider this:

//----
module Foo;
import tons_of_imports_here;

void foo()
{
     unqualified_call();
}
//----
import Foo;

void main()
{
     foo();
}
//----

The *instant* the implementation makes an unqualified call, you 
*have* to import *all* the imports of the module, to figure out 
what to call.

Given that you *probably* imported "foo" with the plan to *use* 
one of its functions, you'll encounter an unqualified call sooner 
rather than later, and any "win" will promptly be lost.


More information about the Digitalmars-d mailing list