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