[Development] What to do with qrand/qsrand?

Thiago Macieira thiago.macieira at intel.com
Tue Jun 13 21:52:34 CEST 2017

I've changed almost all uses of qrand in Qt sources to QRandomGenerator and 
eliminated the use of qsrand. That is actually the biggest advantage: not 
needing to seed the generator. I was quite surprised how much use of qrand we 
have in our own source code, and not just in examples. (See commits with 
Change-Id Icd0e0d4b27cb4e5eb892fffd14b5285d43f4afbf).

Obviously those functions need to remain in Qt 5, but what should we do to 
them long-term? See

With this many references, I'm not sure we should even add a QT_DEPRECATED 
warning to it, since that would make trigger-happy "warning--" developers in 
KDE wholesale moving to something else.

 1) do nothing, leave as-is (in Qt 6, use thread_local)

 2) deprecate and provide no replacement. That is, tell people to either:
   - use QRandomGenerator if they need true random, non-bulk
   - use <random> engines if they need bulk
   - use <stdlib.h> rand() if they need C library compatibility

 3) deprecate and provide a thread-safe PRNG, which can be used in bulk
    a) with no seed; or
    b) with an access to seeding

 4) same as #3, but actually use the qrand/qsrand names
   for (a), qsrand would be empty

Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center

More information about the Development mailing list