[PATCH] D41316: [libcxx] Allow random_device to be built optionally

Zhao, Weiming via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 5 14:37:31 PST 2018


We can wrap the random_device as a minstd_rand, a linear congruential 
enginer that a lot of C lib uses for rand().
However based on documentation, we should just provides dummy 
implementation which throws an exception in the constructor of 
random_device [1,2]
But again, compared with run-time exception, a link time error is better 
if we simply skip the implementation.

[1]
"explicit random_device(const string& token = implementation-defined );
...
Throws: A value of an implementation-defined type derived from exception 
if the random_device could not be initialized."
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf 
section 29.6.6  Class random_device (page 1082)

[2] "Notice that random devices may not always be available to produce 
random numbers (and in some systems, they may even never be available). 
This is signaled by throwing an exception derived from the standard 
exception <http://www.cplusplus.com/exception> on construction 
<http://www.cplusplus.com/random_device::random_device> or when a number 
is requested with operator() 
<http://www.cplusplus.com/random_device::operator%28%29>. "   
http://www.cplusplus.com/reference/random/random_device/

Weiming


On 1/2/2018 11:12 AM, Arthur O'Dwyer via Phabricator wrote:
> Quuxplusone added a comment.
>
> @weimingz: Since your platform supports `srand(0)`, is it possible to look at how your platform implements `srand(0)` and "inline" that implementation into `random_device`? That seems like it would be more in keeping with the other ifdefs in this file.
>
> I'm confident that constructing an instance of `random_device` MUST NOT actually call `srand`. (I'd like to say that it shouldn't even call `rand`.) Either of those calls would be observable by the programmer. But there is a precedent for e.g. `random_shuffle` making calls to `rand`.
>
>
> Repository:
>    rCXX libc++
>
> https://reviews.llvm.org/D41316
>
>
>

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux FoundationWe



More information about the cfe-commits mailing list