> On May 28, 2016, at 7:49 AM, Xiaodi Wu via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I don't recall whether it was in this thread or another that this point was 
> made by the core team, but if I'm remembering correctly: it was shared that 
> the protocol is now called CustomStringConvertible because conforming types 
> provide a *custom* description, not merely an ordinary description.
> 
> If we follow that reasoning, ValuePreservingStringConvertible should *not* 
> conform to CustomStringConvertible, because whether the description is 
> value-preserving is orthogonal to whether it has been customized.
> 

IMO "Custom" evoques a general set, of which "ValuePreserving" is a subset.

> But I share your concern that attempting to delete description from Swift 
> will only increase interoperability headaches rather than freeing the name 
> for other uses.
> 
>> On Sat, May 28, 2016 at 00:36 Brent Royal-Gordon via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> > https://github.com/austinzheng/swift-evolution/blob/az-edit-89/proposals/0089-rename-string-reflection-init.md
>> 
>> I prefer the more conservative and backwards-compatible option of using 
>> `description` and conforming `ValuePreservingStringConvertible` to 
>> `CustomStringConvertible`.
>> 
>> This is for three reasons:
>> 
>> * ValuePreservingStringConvertible really is a refinement of 
>> CustomStringConvertible's semantic; a value-preserving `description` should 
>> always be acceptable as an ordinary `description`.
>> 
>> * You should not call `description` directly anyway; you should call 
>> `String.init(_:)`. That makes the arguably non-descriptive name a lot less 
>> important.
>> 
>> * Changing the name of this property now will not actually make 
>> `description` available for the uses you want to put it to in most code. No 
>> amount of monkeying with the Swift standard library in 2016 can change the 
>> fact that the OpenStep specification took that name in 1994, and we need to 
>> interoperate with that heritage. You might free up the name `description` in 
>> value types and Linux-only code, but only at the cost of interoperability 
>> headaches. I don't think that's worth it.
>> 
>> I also think that, if we're serious about ValuePreservingStringConvertible's 
>> initializer restoring the full state of the instance, then it is a 
>> full-width conversion and doesn't need a label.
>> 
>> So, here's what I suggest:
>> 
>>         protocol CustomStringConvertible {
>>                 var description: String { get }
>>         }
>>         protocol ValuePreservingStringConvertible: CustomStringConvertible {
>>                 init?(_ description: String)
>>         }
>>         extension String {
>>                 init<Value: ValuePreservingStringConvertible>(_ value: 
>> Value) { ... }
>>                 init<Value>(describing value: Value) { ... }
>>         }
>> 
>> Actually, I'd *like* to see `String.init(describing:)` constrained to 
>> CustomStringConvertible, but I've lost that argument before.
>> 
>> ("Lossless" instead of "ValuePreserving" is fine too, perhaps even slightly 
>> better.)
>> 
>> --
>> 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
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to