digitalmars.D - GC Dependence
- Frustrated (56/56) Mar 25 2014 Is it possible for the compiler to warn/mark functions,
- Meta (2/58) Mar 25 2014 https://github.com/D-Programming-Language/dmd/pull/1886
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).
Mar 25 2014
On Tuesday, 25 March 2014 at 17:37:34 UTC, Frustrated wrote: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).https://github.com/D-Programming-Language/dmd/pull/1886
Mar 25 2014