Why Ruby?

Ary Borenszweig ary at esperanto.org.ar
Sun Dec 19 12:15:07 PST 2010


On 12/19/2010 03:45 PM, Andrei Alexandrescu wrote:
> On 12/19/10 11:31 AM, Ary Borenszweig wrote:
>> On 12/19/2010 02:28 PM, Andrei Alexandrescu wrote:
>>> On 12/19/10 11:21 AM, foobar wrote:
>>>> 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?
>>>
>>> "a > b" vs. (a, b) { return a > b; }
>>>
>>> Savings: 17 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.
>>>
>>> Also, Ruby is well slower than C++ and other languages. It's easy to
>>> design a beautiful language if that's the primary concern. It's
>>> difficult to design a language when you want to keep in harmony a larger
>>> list of desiderata.
>>>
>>>> I much prefer that the lowering you mentioned to be implemented so
>>>> that performance wise this UGLY hack will have no benefits.
>>>
>>> The lowering will unfortunately solve little. I don't see how
>>>
>>> sort!"a > b"(array);
>>>
>>> is horrible but
>>>
>>> sort(a, b; array) { return a > b; }
>>>
>>> is beautiful and clear. Besides, that return is bizarre - did you mean
>>> return from the comparison or the caller? Ruby chose the latter, which I
>>> think is very sensible, but in that case you have a more difficult time
>>> returning locally.
>>
>> Not at all. The last executed statement is what gets returned. And that
>> doesn't only apply to blocks, but to normal functions:
>>
>> def foo
>> 1
>> end
>
> That would work if and only if it were designed into the language from
> day one - now it's too late. I encourage you to work out through various
> cases (if/else, switch, loops, returning void vs. a value) to see this
> will have considerable difficulties in D.
>
> Andrei

I was just pointing out that it works that way in Ruby, not that it 
should be implemented in D.


More information about the Digitalmars-d mailing list