> Am 22.04.2017 um 05:41 schrieb BJ Homer via swift-evolution 
> <swift-evolution@swift.org>:
> 
> The "Access Control" section of the Swift 3 book says the following:
> 
>> You can mark an extension with an explicit access-level modifier (for 
>> example, private extension) to set a new default access level for all 
>> members defined within the extension.
> 
> The behavior of "private extension" in Swift 3 was a deviation from that 
> model, justified because "private" as a default would have meant that nothing 
> in the extension could ever be called. But it was still contrary to the model 
> suggested by the Swift documentation. 
> 
> Given the highly restrictive behavior of "private" in Swift 3 and the 
> documentation quoted above, it seems unlikely that a developer would 
> intentionally use "private extension" to mean "please make all this stuff 
> visible to the entire file"—it would have worked, but it seems an odd way to 
> write it. If that were the intention, I think "fileprivate extension" would 
> have been more likely.
> 
> I think the change to the behavior of "private extension" is in line with the 
> model proposed by SE-0169, in line with the documented behavior of access 
> control on extensions, and in line with user expectations.
> 
+1

-Thorsten



> -BJ
> 
> On Apr 21, 2017, at 9:30 AM, Douglas Gregor via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> 
>> 
>> 
>>> On Apr 20, 2017, at 7:53 PM, John McCall <rjmcc...@apple.com 
>>> <mailto:rjmcc...@apple.com>> wrote:
>>> 
>>>> On Apr 20, 2017, at 7:31 PM, Douglas Gregor <dgre...@apple.com 
>>>> <mailto:dgre...@apple.com>> wrote:
>>>>> On Apr 20, 2017, at 3:39 PM, John McCall <rjmcc...@apple.com 
>>>>> <mailto:rjmcc...@apple.com>> wrote:
>>>>> 
>>>>>> On Apr 20, 2017, at 6:35 PM, Xiaodi Wu via swift-evolution 
>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>>> On Thu, Apr 20, 2017 at 5:03 PM, Douglas Gregor <dgre...@apple.com 
>>>>>> <mailto:dgre...@apple.com>> wrote:
>>>>>> 
>>>>>> 
>>>>>>> On Apr 20, 2017, at 11:33 AM, Jordan Rose <jordan_r...@apple.com 
>>>>>>> <mailto:jordan_r...@apple.com>> wrote:
>>>>>>> 
>>>>>>> 
>>>>>>>> On Apr 18, 2017, at 20:40, Douglas Gregor via swift-evolution 
>>>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>>>>> 
>>>>>>>> This makes the private/fileprivate distinction meaningful for 
>>>>>>>> extensions. I think also bans the use of "private" at global scope for 
>>>>>>>> non-nominal types or extensions thereof.  A clarifying update to the 
>>>>>>>> proposal is in order, so developers can better understand the 
>>>>>>>> semantics. 
>>>>>>> 
>>>>>>> Wait, hang on, then people have to write 'fileprivate' instead of 
>>>>>>> 'private' for top-level typealiases (and functions?). 
>>>>>> 
>>>>>> That seems like the correct behavior; private is about members with 
>>>>>> SE-0169. What do you think?
>>>>>> 
>>>>>> ...that seems suboptimal, given that the goal has been to make it 
>>>>>> possible for people to use `private` more and not less frequently. IMO, 
>>>>>> there's no need for `private typealias` at the global level to be 
>>>>>> prohibited.
>>>>> 
>>>>> Yeah, I see no reason for this to change the behavior of private 
>>>>> extensions to be more restrictive than before.
>>>> 
>>>> So you’re okay with:
>>>> 
>>>>    private extension X {
>>>>      func foo() { }
>>>>    }
>>>> 
>>>> being equivalent to
>>>> 
>>>>    extension X {
>>>>      fileprivate func foo() { }
>>>>    }
>>>> 
>>>> rather than
>>>> 
>>>>    extension X {
>>>>      private func foo() { }
>>>>    }
>>>> 
>>>> ?
>>>> 
>>>> That seems unintuitive at best.
>>> 
>>> Perhaps, but it's existing unintuitive behavior.  Are you suggesting that 
>>> SE-0169 rationalizes changing it because (1) it's likely that a private 
>>> extension is just meant for the use of other extensions of that type in the 
>>> current file and (2) SE-0169 already allows such uses and so justifies the 
>>> stricter rule?  That is an interesting theory, but I'm not sure I believe 
>>> (1).  
>> 
>> I’m saying (2), and I suspect (1) is most often the case… but I agree that 
>> we’re likely to end up breaking code here.
>> 
>>> More importantly, though, SE-0169 didn't actually propose changing this 
>>> behavior, and it's a very substantial shift in behavior, and we haven't 
>>> actually discussed or gathered any community feedback about it, so I'm 
>>> really struggling to see why it wouldn't need to be a separate evolution 
>>> proposal.  
>> 
>> I was interpreting SE-0169 to mean this, but you are correct: SE-0169 
>> doesn’t spell out a change here.
>> 
>>> And that would be difficult because, as a wise man once said to me, the 
>>> core team considers the access-control matter closed for Swift 4 and will 
>>> not be reviewing any further proposals in this area. :)
>> 
>> Never put stock in charlatans or compiler writers.
>> 
>>      - Doug
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <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