Yigal Chripun wrote:
Andrei Alexandrescu wrote:
[snipped where appropriate]
String mixins are meant to be used for short functions, which at least
in my code there are plenty of. You can e.g. sort by a field by writing
sort!("a.name < b.name")(vec) without so much as thinking about it. If
you want syntax highlighting, sort!(q{a.name < b.name})(vec) may do (it
does in my editor). But then again: almost by definition, if you feel
like needing syntax highlighting in a string mixin, that string has
outgrown its charter. Use a delegate.
that's a good point but I don't like string mixin to be used for that.
Actually, string mixins should be deprecated in favor of better tools.
IIRC, ada has expression generics, which in D would be like:
sort!(a.name < b.name)(vec) // instead of the above
the difference is that it's not a string but an expression in the
language itself.
And you can't do nearly as much with it.
I want to clarify one point here - the problem with this for IDEs
(compared to text editors) is not highlighting, this is merely a
symptom. Unlike a text editor, an IDE understands the code (it works on
the AST level) and therefore the type of the above is a string and is
treated as such - it's not treated as the AST representation of the
expression.
[snip]
4) AST macro's accept expressions of course. string mixins are obsolete.
I don't believe that an AST macro is ever going to be able to reproduce
the composition power of string mixins. But I agree that we'd like to
remove strings from public interfaces.