RFR: 8236850: Operations on constant List/Set.of(element) instances does not consistently constant fold
John Rose
john.r.rose at oracle.com
Mon Jan 13 20:09:39 UTC 2020
On Jan 13, 2020, at 11:49 AM, Paul Sandoz <paul.sandoz at oracle.com> wrote:
>
> For information purposes: an alternative salt might be to use mix32 from Splittable random:
>
> /**
> * Returns the 32 high bits of Stafford variant 4 mix64 function as int.
> */
> private static int mix32(long z) {
> z = (z ^ (z >>> 33)) * 0x62a9d9ed799705f5L;
> return (int)(((z ^ (z >>> 28)) * 0xcb24d0a5c88c35b3L) >>> 32);
> }
>
> as in:
>
> SALT = mix32(System.nanoTime());
Thank you for mentioning that! I get this google hit on it:
https://blogs.oracle.com/dave/a-simple-prng-construction-idiom
There are also similar functions in xxHash.
https://github.com/easyaspi314/xxhash-clean/blob/master/xxhash64-ref.c#L104
Here’s a scary list:
https://en.wikipedia.org/wiki/List_of_hash_functions
I think “doing it right” is overkill for this one place, but I hope we can put
something like that into the JVM or some other low-level place for use
whenever we need a cheap pseudo-random nonce of some sort.
Once there’s an API for it I think we will reach for it a little more often.
Having a common engine means we can afford to tune its predictability
qualities. In both directions: resistance to attack, and reproducibility
for debugging. In the case of Set.of, the former concern doesn’t apply
much, but the latter might.
— John
More information about the core-libs-dev
mailing list