Recently I wanted to write a pure function that returns an unpredictable number, so I decided to use RDTSC (and any equivalent instruction for other CPU architectures) to do this, since the compiler allows RDTSC to be marked as pure
.
However, in the end I discarded this idea because I figured that a pure
function should never return a different value with the same input; and doing so would surely break any applicable memoisation. Inline assembly isn't checked by the compiler, so I was essentially doing the same thing as misusing @trusted
…
Or so I thought. Today I remembered that pureMalloc
exists, which surely doesn't follow these rules and would definitely not work when memoised. So how come it's still allowed to be pure
just by resetting ERRNO? It can return a different value with the same input, so does that mean that using RDTSC is also pure
?