> On Jan 9, 2018, at 11:48 AM, Chris Lattner <clatt...@nondot.org> wrote:
> 
>> On Jan 9, 2018, at 10:23 AM, Ben Cohen <ben_co...@apple.com> wrote:
>>>> 
>>>> The old name can live on indefinitely via a typealias (which has no ABI 
>>>> consequences, so could be retired at a later date once everyone has had 
>>>> plenty of time to address the deprecation warnings). Removing it as not 
>>>> carrying its weight (and instead using `[(Key,Value)]`, which is basically 
>>>> what it’s a wrapper for) is probably off the table for source stability 
>>>> reasons.
>>> 
>>> I’m not familiar with this type at all, so I apologize for the dumb 
>>> question but… why was this added in the first place?  If it is the wrong 
>>> thing, why not just deprecate it in Swift 5 and remove it in a future 
>>> release?  
>> 
>> Given it’s going to be in the ABI regardless, and has at least some marginal 
>> utility, if we can find a more sensible name for it is there any strong 
>> motivation to deprecate it?
> 
> +1 for renaming it to something that isn’t super confusing, but +100 for 
> removing it outright.
> 
> Rationale: if we didn’t have this functionality in the stdlib today, we would 
> not consider adding it.  It doesn’t meet the bar we’ve set for what is in the 
> standard library.  It only exists there by historical accident.  The Mirror 
> API was not carefully considered.
> 

Personally, I feel like this argument for removal as past its use-by date. It 
was a good reason for Swift 3, tenuous for 4 and should be ruled out for 5, 
since the source stability bar has been raised since. Like I said, IMO the 
criteria should now be “active harm”. I also don’t think searches of GitHub etc 
are sufficient justification, except when combined with the active-harm 
argument. I also don’t think the origin story of the type – whether accidental 
or intentional – is relevant to the decision of what to do with it now. It 
exists and people can legitimately use it for their own purposes independent of 
mirrors.

>>> Finally, is anyone actually using this type?
>>> 
>> 
>> IMO that isn’t a question we should be asking any more except in cases where 
>> an existing implementation is causing active harm. Which, confusing name 
>> aside, this type isn’t (aside from API sprawl I guess).
> 
> It directly impacts code size for applications of swift that use the standard 
> library as a standard library, e.g. a raspberry pi dev situation.  It is also 
> bloat, and also takes us down a slippery slope by allowing people to say “if 
> that weird thing is in, why can’t I add my own narrow enhancement?”
> 

The bar for removal and the bar for additions are different. I don’t buy the 
slippery slope argument, and surely neither would anyone else if it were used 
as a justification for new frivolous additions, so this seems like a non-issue 
to me.

> 
> More to the point though, this seems like an implementation detail of 
> Mirrors.  What is the plan for Mirrors + ABI stability?
> 

Absent a proposal to change them to something better (and I’m not aware of one 
pending), the plan is they are what they are, at least the public API of 
Swift.Mirror. I would guess this whole area is a candidate to be overhauled 
significantly at some point in the post-Swift 5 future with some more 
fully-fledged reflection system, but there is little chance of this happening 
before ABI stability, and interim tinkering doesn’t seem worthwhile to me.

> -Chris


_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to