> On Feb 10, 2017, at 10:08 AM, Abe Schneider <[email protected]> wrote:
> 
>> 
>> Other languages in the C family (e.g., C#, Java) that have both generics and 
>> ad hoc overloading provide the same static-resolution behavior that Swift 
>> does, so someone coming from a language in the general “C” family will be 
>> confounded whatever we choose. Personally, I think C++ got this wrong—I feel 
>> that generic algorithm customization points and algorithm specializations 
>> should be explicitly stated, because it makes it easier to reason about the 
>> generic code if you know where those points are. Swift uses protocol 
>> requirements for customization points, but hasn’t tackled algorithm 
>> specialization yet.
> 
> That's a fair point, though I think Java's type erasure in generics
> surprises/confuses a lot of people (and takes away a lot of the
> potential power of generics).

I consider Java’s type erasure to be orthogonal to the 
overloading/customization point issue, but of course I agree that it’s 
surprising. 

> I can see the advantage of protocols if they allowed this type of design:
> 
> protocol LinearOperations {
>   associatedtype StorageType
>   static func dot(_ lhs:Tensor<StorageType>, _
> rhs:Tensor<StorageType>) -> Tensor<StorageType>
>   ...
> }
> 
> extension Tensor: LinearOperations {
> ...
> }
> 
> extension Tensor: LinearOperations where StorageType:CBlasStorage<Float> {
> ...
> }
> 
> The advantage of this design is that the available functions are
> clearly defined, but it still allows new operations to be defined
> without having to touch the main code base. 

I’m assuming that both of these extensions implement the static func dot(_:_:). 
This is more interesting direction for me, because it’s taking the existing 
notion of customization points via protocol requirements and extending that to 
also support some level of customization.

        - Doug

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to