When compiling multiple source files

John Colvin john.loughran.colvin at gmail.com
Mon Aug 19 10:35:38 PDT 2013


On Monday, 19 August 2013 at 17:15:35 UTC, ProgrammingGhost wrote:
> On Monday, 19 August 2013 at 11:01:54 UTC, Jacob Carlborg wrote:
>> The compiler will start compiling the files passed on the 
>> command line. It will read the files asynchronously and then 
>> lex, parse build an AST and do semantic analyze.
>>
>> When the semantic analyze is done it will have access to all 
>> import declarations. It basically starts the same processes 
>> for all these imports, recursively.
>>
>> The reason for waiting until semantic analyze is done because 
>> you can have code looking like this:
>>
>> mixin("import foo;");
>>
>> The expansion of the mixin and other similar features are done 
>> in the semantic analyze phase.
>
> So everything is parsed once and kept in memory until the 
> compiler finish every source file? Is there any ram problems 
> when compiling large codebases?

Unfortunately, yes, if you give dmd a very large number of files 
all at once, it will chew through all your free RAM. But dmd does 
support separate compilation:

$dmd file1.d -c
$dmd file2.d -c
$dmd file1.o file2.o

which alleviates the problem.

> My experience with D is limited. Are libraries the same as C 
> libraries? From my understanding the linker figures that part 
> out and the compiler needs a separate file for the definition. 
> If I build a library in D is it the same as a C library or 
> different which includes function definitions?
>
> Sorry if I'm confused I know almost nothing about D. I stick to 
> .NET, java and C++

Libraries in D use the same formats as C/C++ libraries.


More information about the Digitalmars-d mailing list