GC Dependence

Frustrated Frustrated at nowhere.com
Tue Mar 25 10:37:31 PDT 2014


Is it possible for the compiler to warn/mark functions, 
templates, and types that use the GC?

e.g.,  I have a mixin template that has a static associative 
array. At some point I would like to remove the GC dependence but 
the only way to ensure I'll remember is to add some type of 
warning/pragma msg.

It would be nice, in fact, to be able to mark things as @nogc or 
whatever when they are no longer dependent on the GC. To do this 
would require scanning all code which is very time consuming. If 
the compiler could report(make a table, say) of all things that 
it believe are gc dependent(and not GC dependent) then it would 
be easier to handle.

e.g.,

function name      GC    @nogc
foo               yes
bar               no
baz               no       x
fubar              ?
fubaz              ?
     fubar          ?       x
func1              ?       x
func2              no
     func1          ?       x

fubaz uses fubar and fubar is unknown hence fubaz is 
unknown(dependencies shown by indentation). One could force a 
function to be GC independent but unverified by having the nogc 
attribute(e.g., if it uses functions that can't be verified by 
the compiler). e.g., func1 is assumed not to be gc dependent, 
func2 uses func1 and verified not to be gc dependent by assuming 
func1 isn't.

Having such a list could result in having GC dependent functions 
marked with nogc. This should result in an error.

It should be rather easy to deal with and easy for the compiler 
to generate such a table. The compiler either implicitly 
generates calls to the GC(hence marked yes under the GC column), 
the user explicitly calls the GC(again, marked), the user uses 
types that are GC dependent(GC type allocations), or calls 
functions that use the GC.

By having a table we can easily determine how much a function is 
dependent on the GC and how to go about making it not. (if it 
just dependents on functions that are using the GC then it would 
not use the GC but have a list of functions that do or are not 
verified.

I suppose it could get a bit complex with all the 
possibilities(operator overloading, etc but the compiler doesn't 
have to check everything(or anything) as it has the ability to 
mark things as unverified(?).

What this does is not necessarily remove GC dependence but 
defines a way to do so. I could, for example, use it to remove 
all dependence of the GC in my own code but still use the phobos 
which is GC dependent. If phobos ever become GC independent I 
could generate the table and see that all my functions are 
verified to be GC independent and possibly have a utility 
function to mark them with @nogc(scan the table and mark by 
adding the @nogc to the source code... table could include file 
and line number).








More information about the Digitalmars-d mailing list