DCT: D compiler as a collection of libraries

Roman D. Boiko rb at d-coding.com
Sat May 12 07:20:43 PDT 2012


On Saturday, 12 May 2012 at 13:24:11 UTC, deadalnix wrote:
> Le 11/05/2012 13:50, Ary Manzana a écrit :
>> Usually tokens are used and discarded. I mean, somebody that 
>> uses the
>> lexer asks tokens, process them (for example to highlight code 
>> or to
>> build an AST) and then discards them. So you can reuse the 
>> same Token
>> instance. If you want to peek the next token, or have a buffer 
>> of token,
>> you can use a freelist ( 
>> http://dlang.org/memory.html#freelists , one of
>> the many nice things I learned by looking at DMD's source code 
>> ).
>>
>> So adding line and column information is not like wasting a 
>> lot of
>> memory: just 8 bytes more for each token in the freelist.
>
> SDC uses struct Location to store such data.
>
> Every token and AST element have a member data of type location.
>
> As it is value type, no need for free list all thoses sort of 
> thing. When the token is discarded, the location is discarded 
> too. The same goes for AST nodes.
1. If a struct is a field of heap allocated object, it will be
allocated and garbage collected. Only if it only exists on stack
(i.e., in method body), GC is not used.

2. If struct which is often allocated and deallocated, free list
would allow to skip its initialization, which is especially
important if size of struct is large. This is true for both heap
and stack allocated data.


More information about the Digitalmars-d-announce mailing list