Rationale for the `@pure`ity of `Rational{T}(x)`

Thanks for detailed explanation. Probably I should have summarized that in the first post (I thought quoting the code was enough). To clarify, my question has been: operationally Rational{T}(x::AbstractIrrational) looks like a pure function but does it really avoid restriction of @pure? Is it OK to mutate global states in @pure if it is not observable? If so, what is the definition of the observability?

For example, for Rational{T}(x::AbstractIrrational) to be safe when multithreading becomes a normal style in Julia, I think DEFAULT_PRECISION has to be guarded by a lock. An interesting question is that “does accruing a lock mutate the global state?” It certainly is “observable” in the sense that not accruing a lock can turn dead-locking program to a non-dead-locking program. But then maybe things are not “observable” when it does not alter “correct” programs?

But how do you know 256 is enough? Also, if you want to discuss this aspect of Rational{T}, it’s maybe a good idea to open a new topic (or a github issue).