If Swift is to be used for serious data handling, might as well learn from the 
java early errors and directly go highly optimized intrinsic code for this type 
of features: even phones have very good vectorized instructions ... would be 
tragic to use run of the mill gereral purpose code instead

On May 31, 2016, at 9:03 AM, Brent Royal-Gordon via swift-evolution 
<swift-evolution@swift.org> wrote:

>> I'm not a fan of AutoEquatable or AutoHashable. These protocols suggest that 
>> automatic conformance can be defined in the language itself and that derived 
>> protocol instances don't have to be implemented as compiler intrinsics. 
>> That's just not the case. You cannot define something like
>> 
>> @auto protocol AutoEquatable : Equatable {
>>  ...
>> }
>> 
>> because what would you write instead of "..."? Copy Lisp-Macros? Copy 
>> Template-Haskell? I don't really need to disagree here, I could just say 
>> "good idea, do you want to make a proposal for this?" and then I will never 
>> hear again anything from this idea, because no one will be able to write the 
>> "detailed design" section of that proposal. (at least, I don't know how to 
>> design such a feature; the solution space looks empty to me. there are 
>> similar issues with "property behaviors" IMHO, but that's another story.)
> 
> Actually, I believe you could write a version of AutoEquatable merely by 
> adding a couple items from the generics manifesto:
> 
>    protocol AutoEquatable: Equatable {}
>    
>    func == <T: AutoEquatable> (lhs: T, rhs: T) -> Bool {
>        let lhsMirror = Mirror(reflecting: lhs)
>        let rhsMirror = Mirror(reflecting: rhs)
>        
>        for ((lhsLabel, lhsValue), (rhsLabel, rhsValue)) in zip(lhs.children, 
> rhs.children) {
>            guard lhsLabel == rhsLabel else { return false }
>            
>            guard let lhsValue = (lhsValue as! Equatable) openas U else { 
> return false }
>            guard let rhsValue = rhsValue as? U else { return false }
>            guard lhsValue == rhsValue else { return false }
>        }
>        
>        return true
>    }
> 
> This is not the all-powerful code-generation-based solution everyone's pining 
> for, of course. But (modulo a few bugs stemming from this being a proof of 
> concept) it *would* work. If the compiler occasionally decides to write a 
> more specialized equivalent, well, that's its prerogative, right?
> 
> (In a recent thread on property reflection, I discussed the possibility of 
> attaching lists of properties to types, with property behaviors being used to 
> add properties to the lists. That would actually work better than `Mirror` 
> for this task, but it's a more speculative feature.)
> 
> As for an eventual compile-time-generated implementation, well, that kind of 
> thing *does* seem to be on the design team's radar. We've already seen a 
> concrete proposal along those lines in property behaviors; I could imagine a 
> "type behaviors" feature being introduced in the future which could 
> introspect a type and generate new members based on what it sees. And 
> generalized hygienic macros keep coming up too. Just because they aren't in 
> Swift 3 doesn't mean we can't design as though they'll be here eventually.
> 
> -- 
> Brent Royal-Gordon
> Architechies
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to