There was a high bar for breaking changes in swift 4 and is even higher for 
swift 5.  se-110 was approved and implemented on the premises that it was not a 
big change but it was breaking code so it got reverted. Sure the migrator was 
making this easier but the result was a usability regression. I think this is a 
change just for the sake of changing. This will cause unnecessary churn. Let’s 
leave ACLs alone for the next few versions of swift unless we have a way better 
system. 

https://lists.swift.org/pipermail/swift-evolution-announce/2017-June/000386.html





> On Oct 4, 2017, at 8:47 PM, BJ Homer <bjho...@gmail.com> wrote:
> 
> It certainly could break *some* code. But it only breaks code written by an 
> author who wrote ‘private extension’ knowing that ‘fileprivate extension’ was 
> also an option, but still intended it to be shared with the whole file. (If 
> that code was from Swift 2, it would have already been migrated to 
> ‘fileprivate extension’ by the 2->3 migrator.)
> 
> So existing code that says ‘private extension’ was written in a Swift 3 or 4 
> era when ‘fileprivate’ was an option. If the goal was specifically to share 
> it with the whole file, it seems likely that most authors would have used 
> ‘fileprivate extension’ instead of ‘private extension’, as that better 
> communicates the intention. Regardless, though, we could check against the 
> Swift source compatibility test suite to see how widespread that is.
> 
> Regardless, I think this change makes Swift a better language, and I’m in 
> favor of it.
> 
> -BJ
> 
>> On Oct 4, 2017, at 9:10 PM, Jose Cheyo Jimenez via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>> 
>> 
>>> 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
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to