> On Oct 2, 2017, at 9:59 PM, David Hart via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
> 
>> On 3 Oct 2017, at 05:12, Xiaodi Wu via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>>> On Mon, Oct 2, 2017 at 9:16 PM, Matthew Johnson via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> 
>>> Sent from my iPad
>>> 
>>>> On Oct 2, 2017, at 7:33 PM, Jordan Rose via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> 
>>>> 
>>>>> On Oct 2, 2017, at 03:25, Vladimir.S via swift-evolution 
>>>>> <swift-evolution@swift.org> wrote:
>>>>> 
>>>>> On 01.10.2017 1:18, Chris Lattner wrote:
>>>>>>> On Sep 29, 2017, at 10:42 AM, Xiaodi Wu via swift-evolution 
>>>>>>> <swift-evolution@swift.org> wrote:
>>>>>>> 
>>>>>>> Vladimir, I agree with you on that change, but it’s a separate topic 
>>>>>>> from this one.
>>>>>>> 
>>>>>>> Tony is absolutely correct that this topic has already been discussed. 
>>>>>>> It is a deliberate design decision that public types do not 
>>>>>>> automatically expose members without explicit access modifiers; this 
>>>>>>> has been brought up on this list, and it is clearly not in scope for 
>>>>>>> discussion as no new insight can arise this late in the game. The 
>>>>>>> inconsistency with public extensions was brought up, the proposed 
>>>>>>> solution was to remove modifiers for extensions, but this proposal was 
>>>>>>> rejected. So, the final design is what we have.
>>>>>> Agreed.  The core team would only consider a refinement or change to 
>>>>>> access control if there were something actively broken that mattered for 
>>>>>> ABI stability.
>>>>> 
>>>>> So we have to live with *protected* extension inconsistency for very long 
>>>>> time just because core team don't want to even discuss _this particular_ 
>>>>> inconsistency(when access level in *private extension* must be private, 
>>>>> not fileprivate)?
>>>>> 
>>>>> Yes, we decided that access level for extension will mean a default and 
>>>>> top most access level for nested methods, OK. But even in this rule, 
>>>>> which already differ from access modifiers for types, we have another one 
>>>>> special case for 'private extension'.
>>>>> 
>>>>> Don't you think this is not normal situation and actually there IMO can't 
>>>>> be any reason to keep this bug-producing inconsistency in Swift? 
>>>>> (especially given Swift 5 seems like is a last moment to fix this)
>>>> 
>>>> I hate to say it but I'm inclined to agree with Vladimir on this. "private 
>>>> extension" has a useful meaning now distinct from "fileprivate extension", 
>>>> and it was an oversight that SE-0169 didn't include a fix here. On this 
>>>> very narrow, very specific access control issue I think it would still be 
>>>> worth discussing; like Xiaodi said it's not related to James' original 
>>>> thread-starter.
>>> 
>>> I agree with this in principle but would not want to see it become a 
>>> slippery slope back into extremely long access control discussions.
>>> 
>> 
>> As I've said elsewhere, I too agree with this in principle. I agree with 
>> Jordan that the current state of things is justifiable but the alternative 
>> would be somewhat superior, agree that in a vacuum this very narrow and 
>> specific discussion might be warranted, and agree also that this could be a 
>> very slippery slide down a very steep slope.
> 
> Same here. It’s the only grudge I have left with the current access control 
> situation. I remember Doug Gregor and John McCall discussing this during the 
> last access control proposal. And I wouldn’t mind having a very narrow 
> discussion about only this.
> 
> I organize my types into extensions for each conformance and for each access 
> control. I can currently implicitly apply public or fileprivate to all 
> members of an extension but I have no way of doing the same for private. 
> That’s why I think it should be fixed.

This will break a bunch of code because `private extension` has always meant 
`fileprivate extension`. Even Swift 3 had this same behavior. Lowering the 
access level of the extension members will hide a bunch of code that was 
visible to the file. 

169 was not a breaking change but this “fix” would have made it a breaking 
change. I doubt 169 would had been accepted if it was a breaking change. I 
don’t think it’s worth it. 


https://github.com/apple/swift-evolution/blob/master/proposals/0169-improve-interaction-between-private-declarations-and-extensions.md



> 
>>>> 
>>>> (I maintain that the current model does not include a special case; it 
>>>> simply means the 'private' is resolved at the level of the extension 
>>>> rather than the level of its members. But that isn't what people expect 
>>>> and it's not as useful.)
>>>> 
>>>> 
>>>> I agree that changing the behavior of all access modifiers on extensions 
>>>> is out of scope. (I also agree that it is a bad idea. Sorry, James, but 
>>>> wanting 'pubic' here indicates that your mental model of extensions does 
>>>> not match what Swift is actually doing, and that could get you into 
>>>> trouble.)
>>>> 
>>>> Jordan
>>>> 
>>>> _______________________________________________
>>>> 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
> _______________________________________________
> 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