digitalmars.D - mixin functions
- Gor Gyolchanyan (26/26) Nov 01 2012 I find myself doing this very very often and it pains me to write ugly c...
- Tobias Pankrath (4/7) Nov 01 2012 I think that code generating mixin strings should be as well
- Jacob Carlborg (4/27) Nov 01 2012 I would vote for AST macros instead.
- H. S. Teoh (10/31) Nov 01 2012 [...]
I find myself doing this very very often and it pains me to write ugly code like this over and over again: mixin(()=>{ string result; foreach(i; 0..10) result ~= "writeln(" ~ to!string(i); ~ ");\n"' return result; }()); All it does is generates a string in a delegate, which is immediately called and passed to a mixin. Almost all mixins contain generated strings and most if them need a dedicated string generator. I don't want to propose new syntax, because we all know that new syntax is the last thing that will be developed, considering the number of bugs out there. The first thing I wanted to do was this: mixin { foreach(i; 0..10) mixin ~= "writeln(" ~ to!string(i); ~ ");\n"' } I'm not suggesting this to be implemented, this is just what I automatically wanted to write. Anybody else had this kind of thoughts? -- Bye, Gor Gyolchanyan.
Nov 01 2012
I'm not suggesting this to be implemented, this is just what I automatically wanted to write. Anybody else had this kind of thoughts?I think that code generating mixin strings should be as well designed and documented as every other code you write. This mixin feature would be just another step to gain C's preprocessor's reputation for string mixins.
Nov 01 2012
On 2012-11-01 16:55, Gor Gyolchanyan wrote:I find myself doing this very very often and it pains me to write ugly code like this over and over again: mixin(()=>{ string result; foreach(i; 0..10) result ~= "writeln(" ~ to!string(i); ~ ");\n"' return result; }()); All it does is generates a string in a delegate, which is immediately called and passed to a mixin. Almost all mixins contain generated strings and most if them need a dedicated string generator. I don't want to propose new syntax, because we all know that new syntax is the last thing that will be developed, considering the number of bugs out there. The first thing I wanted to do was this: mixin { foreach(i; 0..10) mixin ~= "writeln(" ~ to!string(i); ~ ");\n"' } I'm not suggesting this to be implemented, this is just what I automatically wanted to write. Anybody else had this kind of thoughts?I would vote for AST macros instead. -- /Jacob Carlborg
Nov 01 2012
On Thu, Nov 01, 2012 at 08:31:30PM +0100, Jacob Carlborg wrote:On 2012-11-01 16:55, Gor Gyolchanyan wrote:[...]I find myself doing this very very often and it pains me to write ugly code like this over and over again: mixin(()=>{ string result; foreach(i; 0..10) result ~= "writeln(" ~ to!string(i); ~ ");\n"' return result; }()); All it does is generates a string in a delegate, which is immediately called and passed to a mixin. Almost all mixins contain generated strings and most if them need a dedicated string generator. I don't want to propose new syntax, because we all know that new syntax is the last thing that will be developed, considering the number of bugs out there. The first thing I wanted to do was this:I would vote for AST macros instead.[...] Yeah, mixins are a kind of hack that's unfortunately rather widely used right now. A proper AST macro system would be much better. But I'm not holding my breath for it, given how many issues we still have to fix with our current feature set. T -- Indifference will certainly be the downfall of mankind, but who cares? -- Miquel van Smoorenburg
Nov 01 2012