For some protocols we'd like to require top-level (free) functions, e.g. for many math functions such as abs() or sin(). We already do this implicitly for operators.
*Proposal* Allow top-level function/property requirements in protocols, e.g.: public protocol AbsoluteValuable : SignedNumber { /// Returns the absolute value of `x`. @warn_unused_result toplevel func abs(_ x: Self) -> Self } We'd probably want to require this for operators. This also opens up syntax if we ever get dynamically dispatched operators. public protocol SignedNumber : Comparable, IntegerLiteralConvertible { /// Returns the result of negating `x`. @warn_unused_result toplevel prefix func - (x: Self) -> Self } Currently this is done using the combination of a static method and a top-level generic function on that protocol. As I understand that approach does have some benefits in terms of type-checker performance, though I'm not sure whether that is likely to stay relevant in the future. *Advantages* - Cleaner than current approach (esp. floating point types have tons of top-level functions) - Makes operators less of a special case - Opens up syntax for member operators - Could also apply to top-level properties (esp. useful if we get generic properties, for e.g. π<...>)
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution