Why Ruby?

foobar foo at bar.com
Sun Dec 19 09:21:29 PST 2010


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. 


More information about the Digitalmars-d mailing list