Might be worth taking a glance at https://github.com/WebDrake/hap, less for the code (the class-based approach isn't satisfactory IMO) but for the general structure & organization of stuff

& there's probably some worthwhile documentation changes too

I also did some work to offer better copyright credits than are in Phobos (I tracked down various uncredited authors)

A couple of important notes: (i) we can see "generators" as covering all entities that are producers of uniformly-distributed random bits

and there are 2 distinct types: "random engines", which are pseudo-random, and "random devices", which (at least as far as the computer program is concerned) are "true" sources of randomness

So, it could be worth having a

`random.generator`

package that has 2 further sub-divisions, `random.generator.engine`

and `random.generator.device`

(ii) there's a module that I called *algorithms*

`adaptor`

but a much better description of it is that these are random
i.e. they are algorithms in the same sense as

`std.algorithm`

, but unlike those in `std.algorithm`

, there are random events in the `popFront`

this is stuff like

`randomCover`

and `randomSample`

You might also want to take the generators from https://github.com/WebDrake/dxorshift (happy to submit a PR with those if they are interesting to you)

Hey @WebDrake, yes please open a PR for additional xorshift algorithms. Please unroll the loops

There is a C implementation that can be used to start https://en.wikipedia.org/wiki/Multiply-with-carry

Also it should be reworked to generate exactly 32 or 64 bit numbers. Basic algorithms has

`CMWC_C_MAX`