[swift-evolution] [pitch] remove global sqrt<T: FloatingPoint>

Stephen Canon scanon at apple.com
Mon Jul 11 17:52:36 CDT 2016


> On Jul 11, 2016, at 6:42 PM, Chris Lattner <clattner at apple.com> wrote:
> 
> 
>> On Jul 11, 2016, at 2:28 PM, Stephen Canon via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> Post SE-0067 FloatingPoint provides the usual global operators, as well as a single global function:
>> 
>> 	func sqrt<T: FloatingPoint>(_: T) -> T
>> 
>> It seems out of place and lonely, and it would be nice if we can keep the default members of the global namespace to a minimum.
>> 
>> I’d like to suggest removing this global from FloatingPoint while keeping the existing global functions for concrete types in the Darwin.C module.  The square root operation would still be available for all FloatingPoint types as `.squareRoot()`.
>> 
>> I would also plan to provide this and other math.h-ish globals in a future (post swift 3) Math module.
> 
> I’m very concerned with this.  Why not do exactly the opposite?  Remove the concrete operations from Darwin.C and replace it with a single generic one?
> 
> The rationale for using global functions here is that they are “terms of art” in numerics nomenclature.  If they aren’t, then we should consistently eradicate all the global operations:
> 
> 	assert(Double.pi.sine == 0.0)
> 
> Is this the direction you want to go?

No, definitely not.

I’m fine with placing a generic implementation in Darwin.C.  I would include that as part of this change.  Post Swift 3, we should also have a Swift math module that provides the usual sqrt<T: MathTypeOrWhatever>(_: T) operations.

However, I’m not totally convinced we want every math operation we think of in the global namespace *by default*, and I’d like to avoid painting ourselves into a corner where sqrt( ) just sticks out like a sore thumb in the base stdlib for all time.

– Steve


More information about the swift-evolution mailing list