What is the reason for precondition(condition:message:) to fail silently in release builds?

If it kept the message, what would be the difference between it and fatalError?

The way I understand it, precondition is intended as a compromise between assert and fatalError, where the compiler is allowed to optimize away everything related to constructing the message, but it won’t optimize away the check itself, so that the program is safe from spiraling into undefined territory.

For some examples of why someone would want to have the message stripped, see this thread: