On Thursday, 24 November 2016 at 16:09:23 UTC, Ilya Yaroshenko
wrote:
On Thursday, 24 November 2016 at 13:45:40 UTC, Jonathan M Davis
wrote:
Alternatively, you could just do rndGen().take(1).front, and
as long as rndGen() gives you a reference type, it works just
fine. Unfortunately, std.random did not use reference types
for its ranges. _That_ is the big mistake of std.random and
the main item that needs to be fixed. There are some other
subtleties (e.g. it's useful to be able to save the state of a
random number generating range, but you don't necessarily
really want it to be a forward range), but those are minor in
comparison to the mistake of std.random using value types
rather than reference types for ranges.
- Jonathan M Davis
The fix is opCall syntax. Reference types are classes, which
would not work without linking DRuntime and Phobos (BetterC).
If druntime was initialised by default using
__attribute__((constructor)) for static and linker .init for
shared libraries, would that be good enough for you*? I feel like
you're limiting your design choices because of a relatively small
and simple implementation shortcoming.
* remember, we don't currently guarantee ABI compatibility
between compiler versions even if you don't use druntime/phobos.