On Thursday, 30 January 2014 at 14:08:27 UTC, Ilya Yaroshenko wrote:
1) You can use mixin(format("<Prolog>%(<Begin>%s<End>%)<Epilog>", CompileTimeRange)); See std.format for ranges and std.string.format.

That works for simple cases. Complex cases require that you write a function and calling it with CTFE for creating the mixin string. This can be a problem outside functions, because you are polluting the namespace. It might not be that bad for structs and classes, since you can simply make that helper function private - but for template mixins the helper function must be exposed to the code that uses the mixin.

Having complex strings mixing also means that if there is a problem in that string, the compiler will point to the line where the string is mixed in, not the one where the code that introduces the error is concentrated to the string. Having a static foreach will make the string mixins small and simple enough for this to not be a problem.

Metaprogramming by building the code strings is not something that should be encouraged(*cough* C macros *cough*), but it's currently required sometimes for complex metaprogramming in D. If we had static foreach we would still need string mixins, but at least we will be mixing in many small simple strings instead of one big complex string, and that means we could add to Phobos some helper template mixins for sanitizing the arguments for those mixins.

Reply via email to