On Thursday, 29 September 2016 at 16:02:53 UTC, David Nadlinger wrote:

This wouldn't be a correct use of the feature anyway, since it runs into all sorts of fundamental issues with imports/scoping, aliases and templates. Using .stringof/fullyQualifiedName to generate a reference to a type or symbol in a string mixin is a mistake, period. Unfortunately, the misconception that they *are* code generation tools is fairly wide-spread, to the point where dlang.org contains a similarly misleading comment. [1]

Just emit the typeof expression into the mixin string, e.g. `mixin("typeof(a) c;");`. It should be fairly easy to convince yourself that a similar rewrite is always possible, even if it is sometimes less obvious (in some situations, you might need to change some code to, say, pass on a template parameter `T` all the way to the point of the mixin() call instead of `T.stringof`).

 — David


[1] https://github.com/dlang/dlang.org/pull/380


Maybe it is correct about the usage of .stringof/fullyQualifiedName. But I still don't understand the argumentation. Why it is so bad if something works as expected, why it is so evil if fullyQualifiedName would return what is says: the fully qualified name.

The problem is you can never know all the use cases of some feature. It is just pointless to try to predict where a user will need a feature. I had a use case where I could be sure that everything needed is imported and where I could save compile time and make the function signatures a bit simpler.

Let us just remove fullyQualifiedName from the language. Why spend effort with it? Why should one write into the documentation: Oh, you thought it would work? How funny! This function is just for fun of the library creators and is only good to pass it to writeln(), it isn't supposed to work.

Reply via email to