Thanks for your inputs, John!
I agree that the base 2 is the most popular use case. In fact, I originally proposed the isPowerOf2
version in this pitch thread. However, the community seems to prefer the generalised one. Similarly, SE-0225 proposed three APIs (isMultiple(of:)
, isOdd
and isEven
), but only the generic one isMultiple(of:)
has been accepted. As a result, this proposal ended up with generalisation instead.
Yes, for constant powers, if the type Self
is simple enough (e.g. built-in integer types) for compiler to statically evaluate conditions like base == 2
, the performance penalty can be eliminated thanks to optimisations such as constant-folding and simplify-cfg.