On Wednesday, 23 November 2016 at 05:58:47 UTC, Ilya Yaroshenko
wrote:
On Tuesday, 22 November 2016 at 23:55:01 UTC, Andrei
Alexandrescu wrote:
On 11/22/16 1:31 AM, Ilya Yaroshenko wrote:
- `opCall` API instead of range interface is used (similar
to C++)
This seems like a gratuitous departure from common D practice.
Random number generators are most naturally modeled in D as
infinite ranges. -- Andrei
It is safe low level architecture without performance and API
issues. It prevents users to do stupid things implicitly (like
copying RNGs). A hight level range interface can be added in
the future (it will hold a _pointer_ to an RNG). In additional,
when you need to write algorithms or distributions opCall is
much more convenient than range API. In additions, users would
not use Engine API in 99% cases: they will just want to call
`rand` or `uniform`, or other distribution.
I am sure that almost any library should have low level API
that is fits to its implementation first. Addition API levels
also may be added. Current Phobos evolution is generic
degradation: more generic and "universal" code hide more
uncovered bugs in the code. The std.range is good example of
degradation, it has a lot of API and implementation bugs.
EDIT: std.range -> std.random