Some lazy code to D

Peter Alexander peter.alexander.au at gmail.com
Wed Aug 29 15:52:20 PDT 2012


On Tuesday, 28 August 2012 at 22:53:46 UTC, bearophile wrote:
> The purpose of this post of mine is to compare a nice looking 
> Haskell solution of this problem to its Python/D translation. 
> This means this post is about language design matters and it's 
> not about problem solving :-)
>
> ...
>
> There is a significant problem:
> - This program generates a small sequence of solutions, so 
> lazyness is not important. But sometimes the algoritms have to 
> generate tons of things, and lazyness becomes useful. This D 
> program is not lazy, unlike the Haskell and Python programs. 
> Writing this program with lazyness is not too much hard, but 
> the code becomes uglier, longer and more bug prone. I think C# 
> designers did the right thing adding yield to their language, 
> because it's a construct very often useful.

In general, it is not possible to have both full expressiveness 
and full performance. D gains most of its performance by early 
binding as much as possible. You can delay binding by using the 
InputRange!T interfaces in D to get a similar level of 
expressiveness as in Haskell or Python, but you lose some 
performance.

Yield is interesting, a nice way of turning an algorithm into a 
data structure. However, I imagine it would be very tricky to 
implement in D with various lifetime issues, although maybe I'm 
wrong. What I do know is that it is far too big a feature to be 
adding at this stage in D2.


More information about the Digitalmars-d mailing list