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. 

Reply via email to