uuid icon indicating copy to clipboard operation
uuid copied to clipboard

Add `ReadRandom` and reimplement `NewRandomFromReader` using it

Open joewreschnig opened this issue 3 years ago • 2 comments

Combined with e.g. bufio.Reader this provides fast zero-allocation UUID generation if you do not consider heap memory particularly sensitive, without a global state or lock.

I guess this is my proposal re. the discussion about #80/#86/#88. It's faster than both of them and the single new function opens up other optimization possibilities they don't, e.g. if you already have some pathological [1000]UUID you need to fill.

I didn't remove the original pool implementation because in the end that's a question of the module's specific commitment to its API compatibility rather than a technical one.

joewreschnig avatar Jul 31 '21 18:07 joewreschnig

As mentioned in https://github.com/google/uuid/pull/88#issuecomment-890388714 this does not address the ever-growing number of constructors in this package. It also means someone intending to use crypto/rand.Rand has to explicitly pass it in order to gain any performance benefit from this.

rittneje avatar Jul 31 '21 18:07 rittneje

I didn't remove the original pool implementation because in the end that's a question of the module's specific commitment to its API compatibility rather than a technical one.

There is also the fact that it could sneakily be enabled by some transitive dependency. One of many reasons I chose to throw it out.

rittneje avatar Jul 31 '21 19:07 rittneje