Why Ruby?

Jacob Carlborg doob at me.com
Sun Dec 19 07:40:04 PST 2010


On 2010-12-18 22:50, retard wrote:
> Sat, 18 Dec 2010 19:09:24 +0100, Jacob Carlborg wrote:
>
>> As Nick writes here the Scala/C#-style syntax is one suggestion. There
>> are also several other syntaxes available, one just have to look at
>> other languages to get ideas. Here's a list of the syntax used by a
>> couple of different language, some languages are list more than once
>> because they support more than one syntax. I've listed the languages in
>> order from, what I think, the least verbose to the most verbose
>> lambda/delegate syntax (the number in front of the languages is the
>> level of verbose, if two languages are at the same level I think they
>> are equally verbose).
>>
>> 1 D: foo(writeln(3)); // lazy argument
>
> That's not really equivalent to lambdas. It would be unfair to not
> mention Scala which also supports lazy arguments.

It depends on how you see it. It passes in a piece of code that can be 
executed in "foo". And when you see if like this I think the Scala 
syntax I mention below is the basically the same. (BTW, I mentioned it 
was lazy argument and not a delegate).

>> 1 Scala: foo(_ * _)
>
> This isn't the same. _ * _ is equivalent to (a, b) =>  a * b

I know that, but as far as I know I cannot do the same with D's lazy 
arguments.

> 1 Scala: foo(x =>  x * x)
>
>> 2 C#: foo(x =>  x * x);
>> 3 Scala: foo((x) =>  x * x)
>
> foo(x =>  x * x) also works in this case
>
>> 4 Python: foo(lambda x: x * x)
>> 5 Ruby: foo { |bar| x * x }
>
> Maybe you meant
>
> foo { |x| x * x }
>
>> 5 Ruby: foo do |x| x * x end
>> 6 D: foo((int x) { return x * x; });
>> 7 C++1x: foo([](int x){ return x * x; });
>> 7 Apple's (Objective)-C(++)
>> block extension: foo(^(int x){ return x * x; });
>> 8 JavaScript:
>> foo(function(x){ return x * x })
>> 9 PHP: foo(function ($x) use($fooBar) {
>> return $x * $x; }); // "use" is used for explicitly telling what
>> variables should be available when the scope is gone.
>>
>> Note that I have not listed any functional languages here because I've
>> never used one.
>
> For example:
>
> Lambda calculus: λx.x*x
> Haskell: \x ->  x * x
>
> As you can see, most of the verbosity comes from the fact that lambdas in
> D and C++ contain statements, not a single expression. It's like if-then-
> else vs ternary ?:  -- In languages like Scala these are the same built-in
> feature.

Yeah.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list