> Am 18.07.2016 um 13:52 schrieb Johannes Neubauer via swift-evolution 
> <[email protected]>:
> 
>> 
>> Am 18.07.2016 um 13:05 schrieb L. Mihalkovic <[email protected]>:
>> 
>> IMHO implementing your proposal would close the door on some of the things 
>> you do when building in-memory dbs (T == U -> TRUE for T not related to U), 
>> which if swift remains for small apps is not a terrible loss, but may be 
>> more of an issue for one day doing big-data with it.
> 
> You talk about reference types now, right? I proposed a `default` keyword, 
> which (in a pattern matching fashion) would catch all calls to T == U for 
> which no implementation exists (so this is exactly when T != U). You could of 
> course change for a given type hierarchy the `default` result to `true` if 
> appropriate.

This formulation can be misleading: I mean `a == b` where `a: T` and `b: U` and 
`T != U`. Due to dynamic dispatch even: `a.dynamicType == T && b.dynamicType == 
U && T != U`.

> 
> If you recall how virtual functions work. There is a V-table, which contains 
> an entry for each overridden function and the correct one is looked up and 
> executed with an implicit _self parameter for the instance on which the 
> method has been executed.
> 
> You could write something like this:
> 
> ```swift
> // you could equally write: `func ==(lhs: dispatch A, rhs: dispatch A) -> 
> Bool = false`
> dispatch func ==(lhs: A, rhs: A) -> Bool = false {
>  lhs === rhs
> }
> 
> // the default value `= false` is inferred...
> dispatch func ==(lhs: Aa, rhs: Aa) -> Bool {
>  lhs.a == rhs.a
> }
> ```
> 
> You could change the default value of course. For comparisons (`Comparable`) 
> you could add a closure to calculate the default value (e.g. more specialized 
> instances are greater than less specialized so Point3D is always greater than 
> Point2D, in order to get total ordering).
> 
> The implementation would create a dispatch-table for this function. The key 
> would be a tuple `(MetaType, MetaType)`. And the value would be the 
> corresponding function. If the lookup `(lhs.dynamicType, rhs.dynamicType)` 
> does not find a table entry (e.g. because it is `lhs.dynamicType != 
> rhs.dynamicType`), then a auto-closure returning the default value (or if it 
> is a closure, the closure itself) is returned and executed.
> 
> Cool?

All the best
Johannes

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

Reply via email to