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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution