Andrei Alexandrescu Wrote: > On 12/19/10 5:08 AM, foobar wrote: > > Walter Bright Wrote: > > > >> JRM wrote: > >>> you could write: > >>> sort!(@1>@2)(x); > >> [...] > >>> I think this idea (or something similar) is worth consideration. It is > >>> simply a small extension to an already existing feature that would give D > >>> a terser syntax for lambda's than most of the other languages we've been > >>> discussing. > >> > >> but: > >> > >> sort!("a>b")(x); > >> > >> is just as short! And it already works. > > > > I think that the issue here is not about syntax as much as it is about > > semantics: > > As others said, this is equivalent to dynamic language's eval() or to D's > > string mixin and the this raises the question of hygiene which sadly has no > > good solution in D. > > > > The main concern is this: > > In what context are the symbols 'a' and 'b' evaluated? > > > > At the moment they cannot be correctly evaluated at the caller context and > > do not allow: > > sort!("a.foo()> b.bar()")(whatever); > > That does work. What doesn't work is calling nonmember functions looked > up in the context of the caller. > > Andrei
Either way, I personally don't care that much for another syntax for delegates. I personally just want to see this ugly hack removed from the standard library and discouraged. This feature promotes a code smell. And for what, as you said yourself, to save 4 characters? D should be consistent with only ONE delegate syntax. This is why Ruby reads like poetry to its followers and c++ is like carving letters in stone. I much prefer that the lowering you mentioned to be implemented so that performance wise this UGLY hack will have no benefits. regarding hygiene - the term was correct. what happens in the following snippet? int a = 5; sort!"a > b"(whatever); I should be able to specify what is hygienic and what is not.