On Thursday, 29 April 2021 at 17:04:20 UTC, Dennis wrote:
> On Thursday, 29 April 2021 at 15:53:43 UTC, Berni44 wrote:
> I fear that new users might already be swamped with functional style and won't understand what's going on here. (But nice anyway.)
I think the range-based functional style of D is overrepresented.
When I first landed on the homepage, I saw the "Sort lines" example which scared me off. It looked totally unfamiliar, I thought D was more akin to Scala/Haskell than the Java/C-like languages I was most familiar with. Only later did I figure out that D really is a newer C/C++ like the name implies, and the range programming is just Phobos acting on top of it.
In all the examples, there is not a single if
/do
/while
/for
statement, not a single class
or interface
declaration, and only 1 struct
declaration. I think it wouldn't hurt to have examples showing boring/traditional code in D syntax in addition to the fancy, 'code-golfy' programs.
I personally think it can be used very well with foreach:
// Estimate π using random integers
void main()
{
import std.stdio, std.range, std.random, std.math, std.conv, std.numeric;
Mt19937_64 randomGen; randomGen.seed(unpredictableSeed!ulong);
int pairCount = 1_000_000;
int coprimeCount = 0;
foreach (randomPair; randomGen.chunks(2).take(pairCount)) {
if (gcd(randomPair.front, randomPair.dropOne.front) == 1)
coprimeCount++;
}
double prob = coprimeCount.to!double / pairCount.to!double;
writefln("π ≈ %.15f", sqrt(6.0 / prob));
}
Though I would have liked more if the take
amount could be a template parameter instead so it could be tuples where I can directly take [0] and [1]