Does D have too many features?
bearophile
bearophileHUGS at lycos.com
Sat Apr 28 16:29:33 PDT 2012
Peter Alexander:
> f(x) ---> x.f() is not progress in language design.
I used to think the same. But Haskell offers "." and $ to chain
functions and remove parentheses, F# has the |> pipe operator.
In D UCFS is almost equally useful to turn nesting of function
calls in a more readable chain. In functional-style code this
makes a lot of difference, turning:
foo(bar(copy(baz(a), spam(b))))
Into:
baz(a).copy(b.spam()).bar().foo()
When I see 3+ nested parentheses I find it hard to read the
expression. While a chain is easy to read.
> In theory. IMO the amount of time you spend trying to please
> the type system could have been better spent optimizing your
> code manually.
>
> No code I have ever written would benefit significantly from
> these potential optimisations. For example, one optimisation is
> that pure function calls could be hoisted out of loops. Great,
> except that if that function call had any significant cost
> whatsoever, I would have already done that optimisation myself.
I used to write lot of D1 code too, and I've seen that managing
D2 const-related issues slows down significantly my coding
compared to D1 coding, so undeniably they have a cost.
But in D the main purpose of "pure" is not as optimization tool,
but more as a tool to enforce a better coding style, that makes
code understanding (and testing simpler), and helps avoid some
bugs, coming from using variables from outer scopes.
Bye,
bearophile
More information about the Digitalmars-d
mailing list